Шифрование на Android и c# — android c# шифрование

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд
Загрузка...

Вопрос:


есть шифрование на c# и требуется сделать аналогичное на android.
Пробовал по разному вот к чему пришел:
на c#

var salt = new byte[SaltSize];
fileStream.Read( salt, 0, SaltSize );
// initialize algorithm with salt
var keyGenerator = new Rfc2898DeriveBytes( password, salt );
var rijndael = Rijndael.Create();
rijndael.IV = keyGenerator.GetBytes( rijndael.BlockSize / 8 );//128/8 = 16
rijndael.Key = keyGenerator.GetBytes( rijndael.KeySize / 8 );//256/8 = 32           
using( var cryptoStream = new CryptoStream( fileStream, rijndael.CreateDecryptor(), CryptoStreamMode.Read ) )
{
---- дальше не важно

и на андроид

SecureRandom r = new SecureRandom();
byte[] Salt = new byte[8];
r.nextBytes(Salt);
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
SecretKey tmp = factory.generateSecret(new PBEKeySpec(key.toCharArray(), Salt, 1000, 128));
IvParameterSpec iv = new IvParameterSpec(tmp.getEncoded());//128/8 = 16
tmp = factory.generateSecret(new PBEKeySpec(key.toCharArray(), Salt, 1000, 256));
SecretKeySpec skeySpec = new SecretKeySpec(bbb, "AES");//256/8 = 32
Cipher rijndael = Cipher.getInstance("AES");
rijndael.init(Cipher.ENCRYPT_MODE, skeySpec,iv);

и при шифрование выходит разный результат
пример результата на андроид

IV = 84, 113, -97, 65, 36, -2, -67, -7, 34, 91, 109, 79, 77, 36, 112, 92
Key = 84, 113, -97, 65, 36, -2, -67, -7, 34, 91, 109, 79, 77, 36, 112, 92, -82, 18, 14, 99, -113, -61, 75, 68, -41, -34, 30, 77, 86, 35, 58, 46

а на c#

IV = 84, 113, -97, 65, 36, -2, -67, -7, 34, 91, 109, 79, 77, 36, 112, 92
Key = -82, 18, 14, 99, -113, -61, 75, 68, -41, -34, 30, 77, 86, 35, 58, 46, -90, 61, 106, -1, -117, 56, 107, 8, -109, -30, -119, -22, 77, 103, -17, 127

в итоге вектор совпадает, а вот ключ почему-то совпадает только на половину, что я делаю не так?
P.S. я знаю что вектор и ключ каждый раз разные, я привёл только пример их значений.

Автор вопроса: GetYouFun

GetYouFun

изменил код на андроиде на такой:

SecureRandom r = new SecureRandom();
byte[] Salt = new byte[8];
r.nextBytes(Salt);
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
SecretKey secretKey = factory.generateSecret(new PBEKeySpec(key.toCharArray(), Salt, 1000, 384));
byte[] data = secretKey.getEncoded();
byte[] keyBytes = new byte[32];
byte[] ivBytes = new byte[16];
System.arraycopy(data, 16, keyBytes, 0, 32);
System.arraycopy(data, 0, ivBytes, 0, 16);
IvParameterSpec iv = new IvParameterSpec(ivBytes);//128/8 = 16
Log.d("array",Arrays.toString(iv.getIV()));
SecretKeySpec skeySpec = new SecretKeySpec(keyBytes, "AES");//256/8 = 32
Cipher rijndael = Cipher.getInstance("AES/CBC/PKCS5Padding");
rijndael.init(Cipher.ENCRYPT_MODE, skeySpec,iv);

нужно было просто создавать ключ один раз длиной в 384 бита, и делить его

Источник

Вам также может быть интересно:

Drag and Drop UWP — c# xaml mvvm
Вопрос: Нужно иметь возможность добавлять изображения в приложение путем перетаскивания из файловой системы У Grid включил AllowDrop. Но как добавить перетаскиваемые изображения в коллекцию? Т.к. те ...
Растягивание Высоты , Резина — html css html5
Вопрос: Здравствуйте! Реализовал резиновый дизайн. Растягивается ширина, но длина по % не растягивается. Возможно ли это реализовать? Или так и задумано, растягивание только на ширину ...
Jquery position().left Как быть на мобильниках? — javascript jquery css
Вопрос: На мобильных устройствах, если зумишь экран, position всегда разный. $('g').position().left Как сделать так, чтобы он не менял свои значения? Автор вопроса: ...
Jquery position().left Как быть на мобильниках? — javascript jquery css
Вопрос: На мобильных устройствах, если зумишь экран, position всегда разный. $('g').position().left Как сделать так, чтобы он не менял свои значения? Автор вопроса: ...
requestAnimation и очередность отрисовки — javascript canvas
Вопрос: Здравствуйте! Реализовал 2D игру и в Edge работает все плавно и круто, но в Firefox'e подвисает, сказали, что нужно сделать, чтобы раз-два момент и все ...
Контекстное/всплывающее меню в Android — java android popup
Вопрос: Есть ли техническая возможность сделать приложение, добавляющее свое контекстное или всплывающее меню в любом месте системы? Хочу, чтобы при выделении любого текста появлялась дополнительная кнопка ...
Контекстное/всплывающее меню в Android — java android popup
Вопрос: Есть ли техническая возможность сделать приложение, добавляющее свое контекстное или всплывающее меню в любом месте системы? Хочу, чтобы при выделении любого текста появлялась дополнительная кнопка ...
Завершить службы циклом — c# windows-service
Вопрос: Можно ли остановить службы циклом? У меня есть список служб, занёс их в List List<string> name = new List<string> { "AdobeARMservice", "RemoteRegistry", "TermService", "Messenger", "SSDPSRV", ...
Завершить службы циклом — c# windows-service
Вопрос: Можно ли остановить службы циклом? У меня есть список служб, занёс их в List List<string> name = new List<string> { "AdobeARMservice", "RemoteRegistry", "TermService", "Messenger", "SSDPSRV", ...
RecyclerView — разная разметка — android recyclerview
Вопрос: Смотрел, я смотрел в сторону RecyclerView и наконец решил кинуть ListView и на тебе! В "плохом прошлом" мой ListView использовался для двух разметок. Сейчас я ...
RecyclerView — разная разметка — android recyclerview
Вопрос: Смотрел, я смотрел в сторону RecyclerView и наконец решил кинуть ListView и на тебе! В "плохом прошлом" мой ListView использовался для двух разметок. Сейчас я ...
Как правильно передать массив аргументом для пользовательской функции — php
Вопрос: Если не брать в функцию все это, тогда результат работает. А если вот так в функции все выполнять, тогда PHP ругается: «Invalid ...
Как правильно передать массив аргументом для пользовательской функции — php
Вопрос: Если не брать в функцию все это, тогда результат работает. А если вот так в функции все выполнять, тогда PHP ругается: «Invalid ...
ViewPager внутри ViewPager — такие матрешки работают? — android viewpager
Вопрос: Доброго времени суток. Назрела новая задача. Есть каталог мастеров. При выборе конкретного мастера открывается его страница (активити с ViewPager), и теперь мастеров можно перелистывать свайпом. ...
Почему id всегда 1 Yii2 — yii авторизация
Вопрос: Использую все как по документации. Для получения информации о пользователе использую $identity = $model->findOne(]); И каким бы не был email, id пользователя всегда ...

Оставьте ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *