Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash Perl哈希输出不同于Shell哈希输出_Bash_Perl_Shell_Hash - Fatal编程技术网

Bash Perl哈希输出不同于Shell哈希输出

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

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

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,结果都是一样的:(