Crypto JS:TripleDES没有正确加密

时间:2017-06-08 13:21:23

标签: javascript node.js encryption cryptojs tripledes

当使用crypto js tripleDES进行加密时,我注意到所有加密的字符串都是小长度的,例如“01”,“111”,“20”正确加密但是长字符串如“5000021234567890000”,输出是'n'正确或不是我期望的价值。 例如对于“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});

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

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

    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)

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