Bash Perl哈希输出不同于Shell哈希输出
我正在尝试对字符串进行简单的sha512哈希:Bash Perl哈希输出不同于Shell哈希输出,bash,perl,shell,hash,Bash,Perl,Shell,Hash,我正在尝试对字符串进行简单的sha512哈希: somekeyidentifier0 当我在SHELL中使用openssl命令对其进行散列时,我得到以下结果: echo -n somekeyidentifier0 | openssl dgst -sha512 $out2 = `echo -n somekeyidentifier0 | openssl dgst -sha512`; $out2 = system("echo -n somekeyidentifier0 | openssl dg
somekeyidentifier0
当我在SHELL中使用openssl
命令对其进行散列时,我得到以下结果:
echo -n somekeyidentifier0 | openssl dgst -sha512
$out2 = `echo -n somekeyidentifier0 | openssl dgst -sha512`;
$out2 = system("echo -n somekeyidentifier0 | openssl dgst -sha512");
结果是:
0dea2e1c2897205f595ce1418dbd216821fcdfd698b74df572c77ab785b2fdda3321765f76bc10b2821165206d90ebde5e1731942d738451e12777db2b964743
当我使用下面的Perl shell执行方法对其进行散列时,我得到以下结果:
echo -n somekeyidentifier0 | openssl dgst -sha512
$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
为什么这两个散列的值不同?
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...
在我看来是一样的:我得到这个:94A58FE5E64568694C2435BE368ECDDA62901AAEA6A7F79C8E60707DD4773C595A0C623CC36D693009E95B3A6E0C992A04DDF60E9099D8D3C35352474A4A当我运行:perl-E'print
echo-n\'somekeyidentifier0\;openssl dgst-sha512
“我以前见过这个确切的问题,但很难找到副本。当您使用backticks时调用的echo
不支持-n
选项,因此您正在散列文本-n somekeyidentifier0
@ThisSuiteisBlack,而在/bin/sh
不是bash的系统上,这不是/bin/bash
的问题。这就是为什么不建议使用echo-n
的原因。是的,但无论使用system、qx还是backticks,结果都是一样的:(