尝试解码AES-128-CBC密文时获取空字符串

时间:2013-09-11 21:55:13

标签: javascript aes cryptojs

即使我确定我有正确的数据(通过在线解码器验证),我只是从解码器输出空字符串。

这是我的javascript:

var cipher  = CryptoJS.enc.Base64.parse(data.split("--")[0]);
var inv     = CryptoJS.enc.Base64.parse(data.split("--")[1]);

console.log("Ciphertext");
console.log(cipher);                             // as word array
console.log(CryptoJS.enc.Hex.stringify(cipher)); // as hex string
console.log("IV");
console.log(inv);                                // as word array
console.log(CryptoJS.enc.Hex.stringify(inv));    // as hex string

// don't worry, this key won't be used in production ;-)
var key = CryptoJS.enc.Utf8.parse("GzUaLsk7SI9VDja3");
var decrypted = CryptoJS.AES.decrypt(cipher, key, { iv: inv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });

console.log(decrypted);

decrypted = decrypted.toString(CryptoJS.enc.Utf8);
console.log(decrypted);

data是一个带有密文和IV的字符串,两者都是Base64编码的,用2个破折号(' - ')分隔。

我将密文和IV的十六进制表示粘贴到this tool以验证我的数据是否正确,这给了我想要的结果。

有人可以帮我解释为什么我从解密函数中得到空字符串(以及空字数组)?顺便说一下,我对这段代码没有任何错误。

1 个答案:

答案 0 :(得分:4)

正如我所料,问题不在于填充。这是工作代码:

var cipher = CryptoJS.enc.Base64.parse(data.split("--")[0]);
var inv    = CryptoJS.enc.Base64.parse(data.split("--")[1]);

var key = CryptoJS.enc.Utf8.parse("GzUaLsk7SI9VDja3");
var aesDecryptor = CryptoJS.algo.AES.createDecryptor(key, { iv: inv });

var decrypted = aesDecryptor.process(cipher);
var plaintext = decrypted.toString(CryptoJS.enc.Utf8);