CryptoJS AES-128 加密加盐结果与客户端提供的值不匹配
我想将使用 CryptoJS 的加密结果与提供的客户 API 预期输出进行匹配。
我未能达到预期的产出。这里有很多类似的帖子,但我尝试过的似乎都不起作用,我错过了什么??
(请参阅codepen.io获取代码https://codepen.io/wenditurner/pen/QWoadve)
var encryptionValue = "c8FtWECYDZUgPKqHO5g1CsakelzQGyY9|2014-08-14 18:33:49|123456789,A,John Smith";
var key = 'BTikvHBatPdAtgT3317QIQqGFY25WpIz';
var iv = '3a3JD8c02zdk5isU';
var hexKey = CryptoJS.enc.Utf8.parse(key);
var hexIv = CryptoJS.enc.Utf8.parse(iv);
console.log("hexKey: " + hexKey);
// 4254696b7648426174506441746754333331375149517147465932355770497a
console.log("hexIv: " + hexIv);
// 3361334a44386330327a646b35697355
console.log("hexIV correct in docs: 3361334a44386330327a646b35697355");
// 3361334a44386330327a646b35697355 -- MATCH
var encrypted = CryptoJS.AES.encrypt(encryptionValue, hexKey, {
iv: hexIv,
padding: CryptoJS.pad.Pkcs7,
mode: CryptoJS.mode.CBC
}).ciphertext;
console.log("Encrypted: " + encrypted);
// encrypted output: 5d2a9fa2818578e5c6c545102ee7859216f583883fbb5683099432fcfb946de6761104d2fba77414d4f5de575e0b546b18145672884a605add2d4b2a1d9671f114520f94740e9fcfed7b4ee4cc2d40d6
// correct encrytped output per docs 5d2a9fa2818578e5c6c545102ee7859216f583883fbb5683099432fcfb946de6761104d2fba77414d4f5de575e0b546b18145672884a605add2d4b2a1d9671f1f05ce7021ba2b67a5599f5b19df6e9b6
客户的文件:
加密
AES(或Rijndael)加密方法用于加密[加密值]。
AES 需要提供 32 个字符的密钥。 与 Salt 值一样,除非经过协调,否则密钥不应更改。
AES 还需要一个 16 个字符的初始化向量 (IV),该向量应该是随机生成的。 A。 IV 转换为十六进制格式并附加到加密的末尾 [加密值] 本身不应该被加密。
这使用的加密块大小为 128。
这里使用的是CBC的加密密码模式。
这支持以下填充模式:零、PKCS7、ANSIX923 和 ISO10126。 A。 PKCS7 填充是默认值。
加密后,[加密值] 将作为十六进制字符串包含在 URL 中。
示例:
a.使用以下值:
我。钥匙: BTikvHBatPdAtgT3317QIQqGFY25WpIz
ii.初始化向量: 3a3JD8c02zdk5isU
iii. [加密值] 数据: c8FtWECYDZUgPKqHO5g1CsakelzQGyY9|2014-08-14 18:33:49|123456789,A,约翰·史密斯
b.转换为十六进制的 IV 应该是这样的: 3361334a44386330327a646b35697355
c.转换为十六进制的加密 [encryptionValue] 应该是这样的: 5d2a9fa2818578e5c6c545102ee7859216f583883fbb5683099432fcfb946de676110 4d2fba77414d4f5de575e0b546b18145672884a605add2d4b2a1d9671f1f05ce7021b a2b67a5599f5b19df6e9b6
他们在示例中使用了零填充 (
.ZeroPadding
),而不是 PKCS#7。这就是为什么最后一个块不正确。