3des加密字符串,AB加密的结果不一样,但是B能解密A

发布于 2022-09-04 08:05:17 字数 1546 浏览 28 评论 0

代码是基于nodejs写的,请到这个目录checkout出来,如果不checkout也行,依赖一个库,crypto-js

https://git.oschina.net/p2227...

主要代码如下

'use strict';

//common
var keyStr = 'D07D6882A1E5ADB5F65544C9';
var clearText = '634\0\0\0';

//----------------- program 1
var crypto = require('crypto');
var keyBuf = Buffer.from(keyStr);
var ivBuf = Buffer.alloc(0);
var cipherNode = crypto.createCipheriv('des-ede3',keyBuf,ivBuf);
cipherNode.update(clearText, 'utf8', 'hex');
var strNode = cipherNode.final('hex');
console.log(strNode); //9e7ab27a48fb1085

//----------------- program 2
var CryptoJS = require('crypto-js');
var keyjs =  CryptoJS.enc.Latin1.parse(keyStr);
var options = {
  mode: CryptoJS.mode.ECB,
  iv:CryptoJS.enc.Latin1.parse(''),
  padding: CryptoJS.pad.ZeroPadding
};

var strCryptojs = CryptoJS.TripleDES.encrypt(clearText, keyjs, options).ciphertext.toString();
console.log(strCryptojs); //d33b6a74ae3bef87


//-----decrypt
var decryptNodeByJs = CryptoJS.TripleDES.decrypt({
    ciphertext: CryptoJS.enc.Hex.parse(strNode)
}, keyjs, options).toString(CryptoJS.enc.Utf8).replace(/[\u0000-\u0008]/g, '');
console.log(decryptNodeByJs);

// var decipherNode = crypto.createDecipheriv('des-ede3',keyBuf,ivBuf);
// decipherNode.update(strCryptojs);
// var decryptJSByNode = decipherNode.final('latin1'); //error
// console.log(decryptJSByNode);

主要疑问是,用node原生API加密的结果和crypto-js的结果不一样,但是后者能解密前者。
有没人能说清其中的原因?或者crypto-js的参数怎么调整能和原生API结果一样?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

翻身的咸鱼 2022-09-11 08:05:17

crypto-js加密你代码里已经指定padding为模式为CryptoJS.pad.ZeroPadding,而crypto没有指定padding模式,十有八九是两个算法不同的padding导致,题主看下如何设置nodejs加密API如何设置padding

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文