我正在尝试对字符串执行简单的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
为什么两个哈希的值不同?
答案 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...