如果我在PHP中运行以下代码
<?=hash('sha256', "'v");?>
我得到这个散列:
e7cf46a078fed4fafd0b5e3aff144802b853f8ae459a4f0c14add3314b7cc3a6
然而,如果我将'v
放入任何在线工具,如http://www.xorbin.com/tools/sha256-hash-calculator,我得到以下哈希:
1 b5cec8c46451b5375ea7e61f310fe831ad17f62098beb7a5bfce304821e3f78
我意识到PHP显然是散列转义值,而不是实际的字符串,
' v ,,(自PHP 5.2.5起)
(参考:http://www.php.net/manual/en/language.types.string.php # language.types.string.syntax.double)
但我想弄清楚的是如何使用命令行或在线工具之一获得与PHP函数相同的结果-我尝试过VT
, vt
, 0x0B
和11
-但它们都没有给我相同的结果。
谢谢你的帮助!
更新:正如@ alexinfo.net指出的,将双引号更改为单引号将把'v
视为字符串,但不幸的是,我无法在此实例中更改PHP
正如我所说,我倾向于修改PHP代码以匹配在线/命令行应用程序。单引号不会转义,并得到您提到的结果。
<?= hash('sha256', ''v'); ?>
编辑:因为你不能改变PHP代码,这里是如何调整命令行,使它像PHP一样正确转义:
echo -e -n "'v" | openssl dgst -sha256
, -e允许转义