2017-10-18 93 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