Crypto JS:TripleDES 未正确加密

Crypto JS: TripleDES not encrypting properly

当使用 crypto js tripleDES 进行加密时,我注意到所有要加密的字符串都很短,例如“01”、“111”、“20”,但输出的字符串很长,例如“5000021234567890000”不正确或不是我期望的值。 例如对于这个 "5000021234567890000",我期待这个:"HctDaKc/U9avOwZMSS5mEi62kfojDHA4" 但我改用这个:HctDaKc/U9bNnFy6eZHqHj3SemorJxQM.

这是我找到并用来加密的代码

let key = CryptoJS.MD5(enckey);
key.words[4] = key.words[0];
key.words[5] = key.words[1];
let iv = CryptoJS.lib.WordArray.create(64/8);
CryptoJS.TripleDES.encrypt("5000021234567890000", key, {iv: iv});

非常感谢您的帮助。

查看加密数据,第一个块匹配,后面两个块不匹配。

    HctDaKc/U9avOwZMSS5mEi62kfojDHA4
    1DCB4368A73F53D6 AF3B064C492E6612 2EB691FA230C7038

    HctDaKc/U9bNnFy6eZHqHj3SemorJxQM
    1DCB4368A73F53D6 CD9C5CBA7991EA1E 3DD27A6A2B27140C

IV 大概都是 0x00 字节。

这表示一个正在使用 ECB 模式,另一个正在使用 CBC 模式。

参见 Block cipher mode of operation,特别是 ECB 和 CBC 模式。

ECB 模式独立加密每个块,CBC 模式将前一个块与要加密的数据进行异或运算,第一个块使用 IV。由于 IV 都是 0x00 值,所以第一个块没有变化。

可以在创建加密器时指定选项,你需要查看文档页面,祝你好运。

它看起来像:

encryptor = crypto.createCipheriv( mode, key, iv)

其中模式是以下之一:'des-ede', 'des-ede-cbc', 'des-ede3', 'des-ede3-cbc', 'des3'