CryptoJS AES-128 未按预期加密结果进行加密

问题描述 投票:0回答:1

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

客户的文件:

加密

  1. AES(或Rijndael)加密方法用于加密[加密值]。

  2. AES 需要提供 32 个字符的密钥。 与 Salt 值一样,除非经过协调,否则密钥不应更改。

  3. AES 还需要一个 16 个字符的初始化向量 (IV),该向量应该是随机生成的。 A。 IV 转换为十六进制格式并附加到加密的末尾 [加密值] 本身不应该被加密。

  4. 这使用的加密块大小为 128。

  5. 这里使用的是CBC的加密密码模式。

  6. 这支持以下填充模式:零、PKCS7、ANSIX923 和 ISO10126。 A。 PKCS7 填充是默认值。

  7. 加密后,[加密值] 将作为十六进制字符串包含在 URL 中。

  8. 示例:

    a.使用以下值:

    我。钥匙: BTikvHBatPdAtgT3317QIQqGFY25WpIz

    ii.初始化向量: 3a3JD8c02zdk5isU

    iii. [加密值] 数据: c8FtWECYDZUgPKqHO5g1CsakelzQGyY9|2014-08-14 18:33:49|123456789,A,约翰·史密斯

    b.转换为十六进制的 IV 应该是这样的: 3361334a44386330327a646b35697355

    c.转换为十六进制的加密 [encryptionValue] 应该是这样的: 5d2a9fa2818578e5c6c545102ee7859216f583883fbb5683099432fcfb946de676110 4d2fba77414d4f5de575e0b546b18145672884a605add2d4b2a1d9671f1f05ce7021b a2b67a5599f5b19df6e9b6

我已将其写在https://codepen.io/wenditurner/pen/QWoadve

javascript encryption aes cryptojs
1个回答
0
投票

他们在示例中使用了零填充 (

.ZeroPadding
),而不是 PKCS#7。这就是为什么最后一个块不正确。

© www.soinside.com 2019 - 2024. All rights reserved.