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],我仍然得到了錯誤的解密。 –