OpenSSL PHP to JavaScript (node)


OpenSSL PHP to JavaScript (node)

我正在将加密脚本从PHP转换为JavaScript,并且正在努力...

节点.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 使用密码iv。Node 仅在不使用 IV 时使用密码,否则您必须提供密钥iv

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

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

从 PHP

文档中的用户注释来看,PHP 中的 $password 参数实际上是加密密钥,而不是实际的密码。这似乎与 OpenSSL 文档一致,OpenSSL 文档声明您使用密钥和初始化向量,或者使用密钥和 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==

问题可能是您需要提供密钥和 IV 以十六进制openssl