【问题标题】:Crypto JS: TripleDES not encrypting properlyCrypto JS:TripleDES 未正确加密
【发布时间】:2017-06-08 13:21:22
【问题描述】:

当使用 crypto js TripleDES 进行加密时,我注意到所有要加密的字符串长度都很短,例如“01”、“111”、“20”,但是对于像“5000021234567890000”这样的长字符串,输出是' t 正确或不是我期望的值。 例如对于这个 "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});

非常感谢您的帮助。

【问题讨论】:

  • 不要在新工作中使用 3DES,它不再被认为是安全的,而是使用 AES(高级加密标准)。
  • 谢谢,但我无权更改加密方式,我只是按照要求进行
  • 给定少量代码的最佳猜测:一个实例正在使用 CBC 模式,另一个正在使用 ECB 模式,我经常看到错误地为 ECB 模式提供了 IV。明确提供加密模式总是更好。此外,您似乎正在使用在大多数情况下已弃用的双键 3DES。
  • 我对密码学一无所知,如何指定模式,CBC或ECB

标签: javascript node.js encryption cryptojs tripledes


【解决方案1】:

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

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'

【讨论】:

  • 谢谢,这引导我找到解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-04
  • 1970-01-01
  • 1970-01-01
  • 2011-05-02
  • 1970-01-01
  • 2016-11-08
  • 2017-08-06
相关资源
最近更新 更多