Кажется, вам не хватает IV (вектор инициализации).
на самом деле не знаю, что такое IV или, если он нужен здесь, код Java для шифрования нигде не говорит об этом
IV - это вектор инициализации , позволяющий повторно использовать ключ для шифрования нескольких сообщений (или блоков). Пожалуйста, посмотрите, как вы используете режим CBC-блока .
Я не уверендля JavaScript API, но, по крайней мере, я могу привести пример на Java.Также вы можете взглянуть на мой блог о криптографических примерах
Java Encryption
SecureRandom rnd = new SecureRandom();
byte[] iv = new byte[SYMMETRIC_BLOCK_SIZE / 8];
IvParameterSpec ivParamSpec = new IvParameterSpec(iv);
SecretKey symmetricKey = new SecretKeySpec(encryptionParams.getKey(), SYMMETRIC_KEY_ALG);
Cipher cipher = Cipher.getInstance(SYMMETRIC_CIPHER_NAME);
cipher.init(Cipher.ENCRYPT_MODE, symmetricKey, ivParamSpec);
byte[] encrypted = cipher.doFinal(encryptionParams.getPlaintext());
/* and encoded form can contain form of base64( IV + ciphertext ) */
Для режима CBC IV должен быть случайным,Если вы не укажете параметр IVParameter, он будет сгенерирован, и вы можете прочитать его с cipher.getIV();
.IV может быть общедоступным, его обычно предшествуют зашифрованному тексту, поскольку IV необходим для дешифрования самого зашифрованного текста.
Расшифровка Java
/* if IV is prepended before the ciphertext, it can be fetched as sub-array
of the decoded message */
IvParameterSpec ivParamSpec = new IvParameterSpec(iv);
Cipher cipher = Cipher.getInstance(SYMMETRIC_CIPHER_NAME);
cipher.init(Cipher.DECRYPT_MODE, symmetricKey, ivParamSpec);
byte[] decrypted = cipher.doFinal(encryptionParams.getCiphertext());
В этомНапример, нет Mac (включая код аутентификации сообщений), вы можете взглянуть на связанный пример.
Для JavaScript вы должны взглянуть на используемый API, но принцип остается тем же (вы должны сгенерировать, использовать, передать и предоставить IV тоже как-то). Этот блог содержит более полный код.
var iv = CryptoJS.lib.WordArray.random(128/8);
var encrypted = CryptoJS.AES.encrypt(msg, key, {
iv: iv,
padding: CryptoJS.pad.Pkcs7,
mode: CryptoJS.mode.CBC
});