即使我确定我有正确的数据(通过在线解码器验证),我只是从解码器输出空字符串。
这是我的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以验证我的数据是否正确,这给了我想要的结果。
有人可以帮我解释为什么我从解密函数中得到空字符串(以及空字数组)?顺便说一下,我对这段代码没有任何错误。
答案 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);