1
我需要在java中加密并使用node.js.解密。解密结果已损坏。
在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: "[[email protected]"
The jave encrypted result is: "dfGiiHZi8wYBnDetNhneBw=="<br>
The node.js result is garbich....
- 在java中我使用 “PKCS5Padding”。在node.js中应该怎么做关于填充?我做了setAutoPadding(false)。如果我不这样做,我会得到错误解码失败。 (仅来自node.js 0.8版)。
- 我试图从java中删除utf8编码,以便与node.js互补,但它不起作用。 任何想法有什么不对?
感谢您的回复。现在我有字节数组,但如何将其转换为node.js中的字符串?使用什么编码?我不知道编码。它是二进制的,ascii? –
@ user1064101:它是UTF-8。 “二进制”不是一种编码。我不知道如何在node.js中做UTF-8解码,而不是JS人员 - 但是您应该能够研究这一点。 –
我在node.js部分缓冲区中使用了数组(默认情况下,它是utf-8的文档):new Buffer([78,101,-38,-37,102,54,-115,95,37, 85,-45,24,57,-3,-35,-7],我仍然得到了错误的解密。 –