在java中加密,在node.js中解密
在java中加密,在node.js中解密,java,node.js,encryption,aes,Java,Node.js,Encryption,Aes,我需要用java加密,用node.js解密。解密结果已损坏。 下面是java代码: public String encrypt(SecretKey key, String message){ Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, key); byte
我需要用java加密,用node.js解密。解密结果已损坏。
下面是java代码:
public String encrypt(SecretKey key, String message){
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] stringBytes = message.getBytes("UTF8");
byte[] raw = cipher.doFinal(stringBytes);
// converts to base64 for easier display.
BASE64Encoder encoder = new BASE64Encoder();
String base64 = encoder.encode(raw);
return base64;
}
下面是node.js代码: AEse3SCrypt.decrypt = function(cryptkey, encryptdata) {
encryptdata = new Buffer(encryptdata, 'base64').toString('binary');
var decipher = crypto.createDecipher('aes-128-cbc', cryptkey);
decipher.setAutoPadding(false);
var decoded = decipher.update(encryptdata);
decoded += decipher.final();
return decoded;
}
As a key I use: "[B@4ec6948c"
The jave encrypted result is: "dfGiiHZi8wYBnDetNhneBw=="<br>
The node.js result is garbich....
AEse3SCrypt.decrypt=函数(加密密钥,加密数据){
encryptdata=新缓冲区(encryptdata,'base64')。toString('binary');
var decipher=crypto.createDecipher('aes-128-cbc',cryptkey);
解密。设置自动添加(false);
var decoded=解密更新(加密数据);
解码+=解密.final();
返回解码;
}
作为密钥,我使用:[B@4ec6948c"
jave加密的结果是:“dfGiiHZi8wYBnDetNhneBw==”
node.js的结果是garbich。。。。
toString()
。这并没有提供字节数组中的数据-它只是在字节数组上调用的Object.toString()
的默认实现
尝试使用Arrays.toString(key)
打印密钥
如果您在node.js代码中使用了那个断开的键值,难怪它会给您带来垃圾
我试图从java中删除utf8编码,以便与node.js互补
这绝对是错误的方法。相反,您应该解决如何让node.js代码将明文数据解释为UTF-8编码的文本。从根本上说,字符串是字符数据,加密作用于二进制数据-您需要一种方法来弥合差距,UTF-8是一种完全合理的方法。decryp的初始结果js中的数据应该是二进制数据,然后通过UTF-8“解码”为文本
恐怕我对填充方面的了解还不够,无法对此发表评论。谢谢你的回答。现在我有字节数组,但如何在node.js中将其转换为字符串?使用什么编码?我不知道编码。它是二进制的,ascii吗?@user1064101:它是UTF-8。“二进制”不是一种编码。我不知道你是如何在node.js中进行UTF-8解码的,不是一个js人-但你应该能够对此进行研究。我在node.js中使用数组的部分缓冲区(根据文档,它默认为UTF-8):新缓冲区([78,101,-38,-37,102,54,-115,95,37,85,-45,24,57,-3,-35,-7]。我仍然得到错误的解密。