即使我确定我有正确的数据(通过在线解码器验证),我也只会得到空字符串作为解码器的输出。
这是我的 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 的十六进制表示粘贴到这个工具中,以验证我的数据是否正确,这给了我想要的结果。
有人可以帮我解释为什么我从解密函数中得到空字符串(和空字数组)吗?顺便说一句,这段代码我根本没有收到任何错误。