java - 使用 Bouncy CaSTLe 和 Node.js 加密时的不同结果

标签 java javascript node.js cryptography

我试图在 Java(使用 Bouncy CaSTLe)和 Node.js 中执行相同的加密操作,但是我在每种语言中收到不同的结果。以下是我尝试的实现 - 谁能发现我哪里出错了?

Java代码

//Java code:
import org.bouncycastle.crypto.engines.DESedeEngine;
import org.bouncycastle.crypto.params.KeyParameter;
import org.bouncycastle.crypto.*;
//...
String inputString = "24778721";  //8 bytes
String keyString = "lf9aodkflaen7;ad";
BufferedBlockCipher cipher = new BufferedBlockCipher(new DESedeEngine());
byte[] key = keyString.getBytes();
byte[] input = inputString.getBytes();
cipher.init(isEncode, new KeyParameter(key));       

byte[] result = new byte[cipher.getOutputSize(input.length)];       
int outputLen = cipher.processBytes(input, 0, input.length, result, 0);
cipher.doFinal(result, outputLen);

//result is "65dcbb2e08e6d66e"

JavaScript 代码

//node.js
var crypto = require('crypto');
var key = "lf9aodkflaen7;ad";
var data = "24778721";
var keybuf = new Buffer(key);
var databuf = new Buffer(data);

var cipher = crypto.createCipher('des-ede', keybuf);
cipher.update(databuf);
var result = cipher.final();

// result is "bf d2 cc 51 c5 e9 ef 38"

使用 createCipheriv 函数的替代方法:

var cipher = crypto.createCipheriv('des-ede', keybuf.toString("binary"), '');
cipher.update(databuf);
var result = cipher.final();

// result is  "7a 24 bf 56 04 18 e3 6a"

最佳答案

您第二次尝试时就差不多了。此代码将为您提供与 Bouncy CaSTLe 相同的值:

//node.js
var crypto = require('crypto');
var key = "lf9aodkflaen7;ad";
var data = "24778721";
var keybuf = new Buffer(key);
var databuf = new Buffer(data);

var cipher = crypto.createCipheriv('des-ede', keybuf, '');
var crypted = cipher.update(databuf, 'utf8', 'hex');

console.log(crypted);
//65dcbb2e08e6d66e

关于java - 使用 Bouncy CaSTLe 和 Node.js 加密时的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20606085/

相关文章:

java - 使用 Java 8 更改列表中元素的所有位置

JavaScript 对象创建模式

node.js - child_process中的spawnSync函数不返回任何内容

javascript - Typescript 真的向后兼容吗?

mysql - Node.js 服务器中 mysql 数据库的要求

java - MVP:有效检索 View 组件

java - 安卓聊天客户端: socket connection

java - 如何使用 Apache Shiro 和 JSP 当用户重新登录时重定向到主页

javascript - 菜单中的粘性 DIV

javascript - Amazon Connect 出站 CCP 软电话号码预填