Perl哈希输出与Shell哈希输出不同

时间:2015-12-03 18:16:38

标签: bash perl shell hash

我正在尝试对字符串执行简单的sha512哈希:

somekeyidentifier0

当我在SHELL中使用openssl命令对其进行哈希处理时,我得到了这个:

echo -n somekeyidentifier0 | openssl dgst -sha512

结果如下:

 0dea2e1c2897205f595ce1418dbd216821fcdfd698b74df572c77ab785b2fdda3321765f76bc10b2821165206d90ebde5e1731942d738451e12777db2b964743

当我使用后面的Perl shell执行方法对其进行散列时,我得到了这个:

$out2 = `echo -n somekeyidentifier0 | openssl dgst -sha512`;


$out2 = system("echo -n somekeyidentifier0 | openssl dgst -sha512");

使用qx时的结果相同:

$cmd2 = "echo -n somekeyidentifier0 | openssl dgst -sha512";
$out2 = qx($cmd2);

$out2的值始终如此:

94a58fe5e645658694c2435be368ecdda62901aaea6a7f79c8e6070dd4773c595a0c623cc36d693009b59ae95b3a6e0c992a04ddf60e9099d8d3c35352474a4a

为什么两个哈希的值不同?

1 个答案:

答案 0 :(得分:2)

echo通常既是shell内置的,也是找到的实用程序,例如/bin/echo。命令行使用内置命令,Perl脚本使用/bin/echo中的版本,/bin/echo版本将-n开关视为打印参数,而不是命令行开关来调整程序的行为。

$ echo -n somekeyidentifier0 | openssl dgst -sha512
(stdin)= 0dea2e1c2897205f595ce1418dbd216821fcdfd698b74df572c77ab785b2fdda3321765f76bc10...

$ echo "-n somekeyidentifier0" | openssl dgst -sha512
(stdin)= 94a58fe5e645658694c2435be368ecdda62901aaea6a7f79c8e6070dd4773c595a0c623cc36d69...