0
在PHP中,我使用的mcrypt到我的字符串密鑰來加密和LV ...現在我即時通訊移植我的PHP代碼項目節點js和需要得到在同一加密字符串像在PHP的JavaScript ...我的數據是這樣的:的Rijndael-128 CBC JavaScript不喜歡PHP的mcrypt返回正確
lv: 968kjnv0myizvjio
key: 9qdx524o5rzytekr
string: androidtest
encoding: rijndael-128
mode: cbc
在PHP中我得到這個正確的加密字符串: 9620825aa10ce13d9e886b6dec146074
在javascript中(節點庫)我得到這個: 6c6943435771454d34543265694774743742526764413d3d
我的代碼是這樣的:
var MCrypt = require('mcrypt').MCrypt;
var desEcb = new MCrypt('rijndael-128', 'cbc');
desEcb.open('9qdx524o5rzytekr', '968kjnv0myizvjio'); // we are set the key and lv
var ciphertext = desEcb.encrypt('androidtest');
console.log(bin2hex(ciphertext.toString('base64')));
function bin2hex(s) {
var i
var l
var o = ''
var n
s += ''
for (i = 0, l = s.length; i < l; i++) {
n = s.charCodeAt(i).toString(16)
o += n.length < 2 ? '0' + n : n
}
return o
}
我即時通訊使用這個庫:
https://github.com/tugrul/node-mcrypt
我怎樣才能像PHP上面貼同樣的結果在節點JS(JavaScript)的? 或者你知道另一個在節點js中工作以獲得與PHP相同結果的庫嗎? 或者,也許編寫自定義函數來獲取上述存檔?
你有沒有注意到javascript的結果,每個十六進制數字對都在可打印的ascii範圍內,最後兩個對是ascii'=='...看起來像一個base64字符串轉換爲十六進制... if你解碼base64 ...猜你會得到:p –
所以,這應該告訴你爲什麼'ciphertext.toString('base64')'不是正確的做 –
我即時通訊新的解碼的東西...在PHP我得到正確的值,所以我的Android設備解碼成功...所以我需要刪除base64? – John