2017-10-18 69 views
1

我需要改變這個PHP代碼:如何將此mcrypt php代碼轉換爲nodejs中的相同代碼?

$cipher_alg = MCRYPT_TRIPLEDES; 
$key = "thekey"; 
$iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher_alg, MCRYPT_MODE_ECB), MCRYPT_RAND); 
$encrypted_string = mcrypt_encrypt($cipher_alg, $key, $string, MCRYPT_MODE_ECB, $iv); 

return base64_encode($encrypted_string); 

到的NodeJS。

我測試使用https://github.com/tugrul/node-mcrypt但具有相同的字符串時,加密後的結果是不一樣的:

代碼測試的NodeJS:

let blowfishCfb = new MCrypt('tripledes', 'ecb'); 
let iv = blowfishCfb.generateIv(); 
blowfishCfb.validateKeySize(false); 
blowfishCfb.validateIvSize(false); 
blowfishCfb.open('thekey', iv); 

let ciphertext = blowfishCfb.encrypt(text); 

return Buffer.concat([iv, ciphertext]).toString('base64'); 

你能幫助理解?

感謝,

+0

哇,四個安全性差的選擇組合:三重DES,ECB模式,Blowfish和空填充!另請注意,ECB模式不會**使用IV。 – zaph

回答

0

不Concat的靜脈輸液和CYPHER在一起:

let blowfishCfb = new MCrypt('tripledes', 'ecb'); 
let iv = blowfishCfb.generateIv(); 
blowfishCfb.validateKeySize(false); 
blowfishCfb.validateIvSize(false); 
blowfishCfb.open('thekey', iv); 

let ciphertext = blowfishCfb.encrypt(text); 

return ciphertext.toString('base64'); 
+0

ECB模式不使用IV,所以創建一個沒有意義。 – zaph