Как расшифровать AES с помощью SJCL
Я хочу расшифровать AES по заданному шифру и ключу с помощью Stanford Javascript Crypto Library (SJCL), но не могу передать ключ:
var key = 'key';
var cipher = 'abjslö';
var aes = new sjcl.cipher.aes(key);
var plaintext = aes.decrypt(cipher);
alert(plaintext);
Это не работает. Ссылаясь на документацию, ключ должен быть "массивом из 4, 6 или 8 слов".
Как это можно сделать?
1 ответ
Ключ должен быть ключом AES длиной 128, 192 или 256 бит. Однако библиотека SJCL работает с 32-битными машинными "словами". Проверьте источник библиотеки с открытым исходным кодом или один из тестов, чтобы узнать, что пройти. Обратите внимание, что пароль не является ключом, вам нужна функция получения ключа на основе пароля, такая как PBKDF2, чтобы преобразовать пароль в ключ.
Шифрование
Создайте массив случайных слов, который будет служить нашим IV(вектором инициализации).
Затем вам нужно создать битовый массив с использованием случайного ключа (размер зависит от уровня шифрования и типа)
Затем вы создаете шифр, используя массив ключей.
И, наконец, закодируйте свои данные с помощью шифра и IV. (вы также можете добавить метаданные для проверки подлинности)
Теперь просто объедините IV и зашифрованный битовый массив и, наконец, преобразуйте его в строку base64 и перейдите.
Обратите внимание, что вы не можете расшифровать AES-GCM без IV.
Расшифровка
При расшифровке вырезать IV из зашифрованной строки.
Теперь с помощью ключа создайте шифр и используйте его для дешифрования строки.
Вы можете найти полный код здесь.