расшифровывать ввод AES на Flutter, когда в сети используется cryptoJS AES - PullRequest
0 голосов
/ 25 февраля 2019

В сети я использую CryptoJS для расшифровки JS:

CryptoJS.AES.decrypt (inputBase64, ключ) .toString (CryptoJS.enc.Utf8);

Пример:

ввод: "tzfwnxVwE / qNoaWRRfqLp11ZyhB4UtKO + 0 / Lvv5B7eE =" ключ: "20190225165436_15230006321670000_1551088475901011 * 101 * для поиска

*расшифровывать ключом любой длины.

Я знаю "Для AES NIST выбрал трех членов семейства Rijndael, каждый с размером блока 128 бит, но с тремя разными длинами ключа: 128, 192 и 256 бит. "

Но я не знаю, как преобразовать ключ длины в 128-битный формат?

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Я искал в библиотеке pointycastle, но я слишком мало для своей работы. У вас есть подобные примеры, написанные на dart, и в Интернете используйте cryptoJS

0 голосов
/ 25 февраля 2019

Когда вы передаете CryptoJS строку в качестве ключа, он обрабатывает ее как парольную фразу и генерирует из нее ключ, используя функцию вывода ключа - в данном случае PBKDF2.Он генерирует 256-битный ключ и 128-битный вектор инициализации (IV).Затем он использует их для шифрования / дешифрования.Вам также необходимо выяснить, какой метод сцепления использует CryptoJS (возможно, цепочка блоков шифра (CBC)) и какой метод заполнения он использует (чтобы убедиться, что обычный текст представляет собой круглое число 128-битных блоков - вероятно, PKCS # 7).

В CryptoJS есть режим «работает из коробки», но не совсем понятно, что он делает изнутри - вам нужно прочитать исходный код или просмотреть документацию.

Когда вы пытаетесь взаимодействовать между двумя системами / языками, лучше, если вы будете нести ответственность за все, а не позволять одному концу принимать произвольные решения.Таким образом, вы можете убедиться, что у вас одинаковые настройки на каждом конце.

Итак, вы можете выбрать:

  • Использовать PBKDF2 для генерации 128-битного ключа и 128-битногоIV от ключевой фразы - скажем, с 9999 раундами
  • Использовать заполнение PKCS # 7
  • Использовать AES в режиме CBC

Pointycastle 1018* Пакет поддерживает все вышеперечисленное в Dart.Похоже, что CryptoJS также поддерживает все это.

Начните с ключевой фразы и убедитесь, что вы можете сгенерировать тот же ключ и IV в JS и Dart.Затем перейдите к созданию шифров.

Не забудьте также никогда , чтобы зашифровать два сообщения с одинаковой парой ключ / IV.Используйте порядковый номер сообщения, например, чтобы немного изменить IV для каждого сообщения.

...