当使用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});
非常感谢您的帮助。
答案 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'