4

我正在将加密脚本从 PHP 转换为 JavaScript 并且正在苦苦挣扎......

node.js密码文档如下:

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

PHP openssl-encrypt文档:

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

PHP 使用密码and 和iv。Node 仅在使用 IV时才使用密码,否则您必须提供密钥iv

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

我也不清楚密钥到底代表什么......节点文档指出,如果只提供密码,就会计算密钥iv .. 这是 PHP 做的吗?如果是这样,当我提供密码iv时它会做什么?它是否使用密码作为密钥

4

1 回答 1

3

从PHP 文档中的用户评论看来$password,PHP 中的参数实际上是加密密钥,而不是实际密码。这似乎与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十六进制提供密钥和 IV。

于 2012-07-03T11:36:49.163 回答