Do not сделайте свой собственный отступ, но пусть функция шифрования сделает это. Это добавлено к открытому тексту, не добавлено. Обычное заполнение называется дополнением PKCS5 и добавляет $ t $ к байту $ t \ in {1,2,3, \ ldots, 16} $, которое составляет полные блоки.
Кроме того, iv является аргументом функции шифрования и не ставится перед открытым текстом. На самом деле (когда вы используете цепочечный режим, такой как CBC, OFB, CFB), он добавляется к зашифрованному тексту.
Таким образом, вы можете сгенерировать IV как вы (хотя, возможно, есть и лучшие функции для этого), а затем использовать открытый текст как есть и шифровать:
EncryptedString=encrypt(StringToEncrypt, EncryptKey, 'AES/CBC/PKCS5Padding', 'Base64', binaryDecode(IV, "base64"))
(на основании этой документации )
добавлено 2
В соответствии с этими документами iv должен быть двоичным, поэтому необходимо преобразовать base64 из generateKey. Спасибо за комментарии @Agax и его "cftry" примеров ...
добавлено 1 Оказывается, что пропуск IV вызовет функцию
генерировать свою собственную IV, и, казалось бы, неповторяющимся способом.
В любом случае мы можем использовать
EncryptedString=encrypt(StringToEncrypt, EncryptKey, 'AES/CBC/PKCS5Padding', 'Base64')
вместо этого. Важно использовать режим цепочки, такой как CBC, чтобы получить эффект распространения от случайного IV, который маскирует идентичные незашифрованные тексты и который по умолчанию «AES» оставляет видимым (предположительно, это делает режим ECB).
IV фактически не добавляется к зашифрованному тексту, когда мы приводим его в качестве аргумента, поэтому вы должны как-то его запомнить, чтобы иметь возможность расшифровывать первый блок простого текста. Совершенно нестандартно. Когда вы позволяете зашифровать генерировать его сам, он предшествует. Таким образом, вы должны использовать ту же версию подписи расшифровки.