Когда вы передаете 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 для каждого сообщения.