将PHP openssl脚本转换为openssl命令

将PHP openssl脚本转换为openssl命令,php,encryption,php-openssl,Php,Encryption,Php Openssl,我用下面的方法来解密数据 $clear = openssl_decrypt($data, 'aes-256-cbc', $pass, 0, $iv); $iv始终为空,但它可以工作 但是当我使用openssl解密同一个文件时(数据是base64编码的) 输入密码后,显示读取输入文件时出错,完全是奇怪的错误 有什么想法吗?在PHP中,$pass实际上是完整的二进制键。openssl实用程序需要实际密码。您可能想使用 openssl aes-256-cbc -d -a -in encrypted

我用下面的方法来解密数据

$clear = openssl_decrypt($data, 'aes-256-cbc', $pass, 0, $iv);
$iv
始终为空,但它可以工作

但是当我使用openssl解密同一个文件时(数据是base64编码的)

输入密码后,显示读取输入文件时出错,完全是奇怪的错误


有什么想法吗?

在PHP
中,$pass
实际上是完整的二进制键。openssl实用程序需要实际密码。您可能想使用

openssl aes-256-cbc -d -a -in encrypted -K <hex-encoded key> -nosalt -iv 00000000000000000000000000000000
openssl aes-256-cbc-d-a-in加密-K-nosalt-iv 00000000000000000000

也许你需要添加
-base64
标志?我尝试了openssl 1.1、openssl 1.0.2和0.9.8,它们都没有
-noiv
命令行选项$pass是用户输入,例如
abcdefg
,所以PHP将其转换为二进制密钥?它可能会以0x00字节无声方式填充,直到密钥有256位。在您的案例中,
abcdefg\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
openssl aes-256-cbc -d -a -in encrypted -K <hex-encoded key> -nosalt -iv 00000000000000000000000000000000