PHP哈希函数"v"-如何启用从命令行转义


PHP hash function doing something strange with "v" - how do I enable escaping from the command line?

如果我在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, 0x0B11 -但它们都没有给我相同的结果。

谢谢你的帮助!

更新:正如@ alexinfo.net指出的,将双引号更改为单引号将把'v视为字符串,但不幸的是,我无法在此实例中更改PHP

正如我所说,我倾向于修改PHP代码以匹配在线/命令行应用程序。单引号不会转义,并得到您提到的结果。

<?= hash('sha256', ''v'); ?>
编辑:因为你不能改变PHP代码,这里是如何调整命令行,使它像PHP一样正确转义:

echo -e -n "'v" | openssl dgst -sha256, -e允许转义