PHP OpenSSL 加密与命令行加密

PHP OpenSSL Encrypt vs Command Line Encypt

我在使用 PHP OpenSSL 的内置方法时遇到了一些问题。我试图通过尝试不同的方法来缩小问题的范围。我正在尝试以下操作:

$input = "this is a test string";
$opensslCommand = "echo \"{$input}\" | openssl enc -AES-128-CBC -a -nosalt -K " . bin2hex($hashing_secret) . " -iv ". bin2hex($iv);

$first = openssl_encrypt($input, "AES-128-CBC", $hashing_secret, 0, $iv);
$second = exec($opensslCommand);

print(urlencode($first) . "<br/>");
print(urlencode($second) . "<br/>");

然而,上面的输出是:

hn%2FZkGKl9EQ7XgFFytcPkTPxJST2jCKEVDoojmkz8xs%3D
hn%2FZkGKl9EQ7XgFFytcPkdQESeAPqlFNwJivth28m9o%3D

如您所见,它们在输出的中间开始发散。我是不是内置或命令行的配置有误?

第 3 方编辑:
使输出更有意义:

Base64编码:
hn/ZkGKl9EQ7XgFFytcPkTPxJST2jCKEVDoojmkz8xs=
hn/ZkGKl9EQ7XgFFytcPkdQESeAPqlFNwJivth28m9o=

十六进制:
867FD990 62A5F444 3B5E0145 CAD70F91 33F12524 F68C2284 543A288E 6933F31B
867FD990 62A5F444 3B5E0145 CAD70F91 D40449E0 0FAA514D C098AFB6 1DBC9BDA

echo 是这里的罪魁祸首。有一个特定的参数可以与 echo 一起使用来抑制它附加到输入字符串的换行符:-n。事实证明,我的输入已通过管道传输到 openssl 中。

$opensslCommand = "echo -n \"{$input}\" | openssl enc -AES-128-CBC -a -nosalt -K " . bin2hex($hashing_secret) . " -iv ". bin2hex($iv);

是正确的命令