2012-04-30 28 views
4

我转换的加密脚本从PHP到JavaScript和我在努力...OpenSSL的PHP​​与JavaScript(节点)

node.js cipher documentation如下:

crypto.createCipheriv(algorithm, key, iv)
创建并返回一个密码对象,给定的算法,密钥和iv。

PHP openssl-encrypt documentation

string openssl_encrypt (string $data , string $method , string $password [, bool $raw_output = false [, string $iv = "" ]])

PHP使用密码和和IV。节点只使用一个密码不使用 IV,否则你必须提供一个关键IV

我将如何转换我的PHP函数节点,当我同时使用时,密码IV

我也对究竟是什么关键表示不清楚......节点文档指出关键如果仅提供密码IV计算..这是PHP做什么?如果是这样,当我提供密码iv时,它会执行什么操作?它是否使用密码作为密钥

回答

3

user comments在PHP文档中看来,PHP中的参数$password实际上是加密密钥,而不是实际的密码。这似乎与OpenSSL docs一致,其中说明您使用或者一个密钥和初始化向量,使用密码从中算法导出密钥和IV,但您永远不会提供密码和IV在一起。

例子:

<?php echo openssl_encrypt('foobar', 'aes-256-cbc', 'password', false, 'abcdefghijklmnop'); 
// prints CUigVN+6jU24E2FdfmmmTw== 

#!/bin/bash 
echo -n foobar | openssl enc -aes-256-cbc -e -K 70617373776F7264 -iv 6162636465666768696A6B6C6D6E6F70 -nosalt -a 
// prints CUigVN+6jU24E2FdfmmmTw== 

的疑难杂症是可能是你需要提供密钥和四openssl十六进制。

+0

感谢您的回复。我仍然没有设法让PHP产生如下结果:'openssl enc -aes-256-cbc -e -pass pass:pass -nosalt -a' – enyo