3des加密没有得到预期的结果
3des encryption didn't get expected result
我的 nodejs 3DES 加密没有得到预期的结果。我的代码有什么问题吗?
let cryptojs = require('crypto-js')
var key = '412B121B61C9782FCA6B983AF29862AA';
var message = '46574669849832145886804657466984';
key = cryptojs.enc.Hex.parse(key);
message = cryptojs.enc.Hex.parse(message);
var result = cryptojs.TripleDES.encrypt(message, key, {mode: cryptojs.mode.ECB, padding: cryptojs.pad.NoPadding});
console.log (result.key.toString());
console.log (result.ciphertext.toString());
console.log (result.toString());
输出是
412b121b61c9782fca6b983af29862aa
511e4f67d9dd0f840c4689348e2e7ce3
UR5PZ9ndD4QMRok0ji584w==
不过应该是
2B4D7E0FE9672FEA5CDF60735B58D356
正如您想象的那样,TripleDES 密钥的长度是 DES 密钥长度的三倍。您使用的密钥是 128 位,而预期的密钥大小是 192 位。
这意味着您拥有 3 个必需键中的 2 个,例如2 批 64 位,第三批 64 位丢失。
TripleDES 的某些实现将简单地使用第一批 64 位作为第三批 64 位(如果您省略它们)。 CryptoJS 不会为您执行此操作,它只是将第三批 64 位设置为 0。您的结果来自使用第一个密钥作为第三个密钥的实现,因此我们必须在 CryptoJS 中模拟此行为.
要解决此问题,请将密钥的值更改为以下内容:412B121B61C9782FCA6B983AF29862AA412B121B61C9782F
。
我的 nodejs 3DES 加密没有得到预期的结果。我的代码有什么问题吗?
let cryptojs = require('crypto-js')
var key = '412B121B61C9782FCA6B983AF29862AA';
var message = '46574669849832145886804657466984';
key = cryptojs.enc.Hex.parse(key);
message = cryptojs.enc.Hex.parse(message);
var result = cryptojs.TripleDES.encrypt(message, key, {mode: cryptojs.mode.ECB, padding: cryptojs.pad.NoPadding});
console.log (result.key.toString());
console.log (result.ciphertext.toString());
console.log (result.toString());
输出是
412b121b61c9782fca6b983af29862aa
511e4f67d9dd0f840c4689348e2e7ce3
UR5PZ9ndD4QMRok0ji584w==
不过应该是
2B4D7E0FE9672FEA5CDF60735B58D356
正如您想象的那样,TripleDES 密钥的长度是 DES 密钥长度的三倍。您使用的密钥是 128 位,而预期的密钥大小是 192 位。
这意味着您拥有 3 个必需键中的 2 个,例如2 批 64 位,第三批 64 位丢失。
TripleDES 的某些实现将简单地使用第一批 64 位作为第三批 64 位(如果您省略它们)。 CryptoJS 不会为您执行此操作,它只是将第三批 64 位设置为 0。您的结果来自使用第一个密钥作为第三个密钥的实现,因此我们必须在 CryptoJS 中模拟此行为.
要解决此问题,请将密钥的值更改为以下内容:412B121B61C9782FCA6B983AF29862AA412B121B61C9782F
。