IV, закодированный Base64, используемый в обоих кодах:
KCgWOBhGET1aIRMiFcIw
дает декодированный код:
28 28 16 38 18 46 11 3d 5a 21 13 22 15 c2 30
, т. Е. IV имеет длину 15 байтов и поэтому слишком короткий, что можетлегко проверить в Интернете, например, здесь . Однако код aes-js выполняет декодирование некорректно и предоставляет 16-байтовый IV:
28 28 16 38 18 46 11 3d 5a 21 13 22 15 c3 82 30
, т. Е. Ошибка декодирования является причиной того, что IV, который на самом деле слишком короткий, получает правильную длину. Напротив, код CryptoJS выполняет декодирование правильно, а затем неявно дополняет слишком короткий IV с 0 байтами до длины 16 байтов:
28 28 16 38 18 46 11 3d 5a 21 13 22 15 c2 30 00
Таким образом, оба кода используют разные IV, что приводит к разным шифротекстам,Неправильное декодирование в коде aes-js происходит в строке:
iv = new Uint8Array(aesjs.utils.utf8.toBytes(atob(iv)));
, которая должна быть заменена на
var iv = base64ToByteArray(iv)[0];
, аналогично ключу. И, конечно, необходимо использовать IV правильной длины, то есть 16 байтов, в противном случае код aes-js отобразит соответствующее сообщение об ошибке. Затем aes-js и код CryptoJS создают один и тот же зашифрованный текст.