PHP OpenSSL加密与命令行Encypt

时间:2016-06-08 16:32:00

标签: php pyopenssl

我在使用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

正如您所看到的,它们开始在输出中间发散。我是否对内置命令或命令行配置错误?

第三方编辑:
更好地理解输出:

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

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

1 个答案:

答案 0 :(得分:2)

echo是罪魁祸首。可以使用echo的某个参数来抑制它附加到输入字符串的换行符:-n。事实证明,随着我对openssl的输入,它会被传输。

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

是正确的命令