1

如果我在 PHP 中运行以下命令

<?=hash('sha256', "\v");?>

我得到这个哈希:

e7cf46a078fed4fafd0b5e3aff144802b853f8ae459a4f0c14add3314b7cc3a6

但是,如果我放入\v任何在线工具,如http://www.xorbin.com/tools/sha256-hash-calculator,我会得到以下哈希:

1b5cec8c46451b5375ea7e61f310fe831ad17f62098beb7a5bfce304821e3f78


我意识到 PHP 显然是在散列转义值,而不是实际的字符串,

\v    垂直制表符(ASCII 中的 VT 或 0x0B (11))(自 PHP 5.2.5 起)

(参考:http ://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.double )

但我想弄清楚的是如何使用命令行或在线工具之一获得与 PHP 函数相同的结果 - 我尝试过, 和VT-vt但它们都没有给我相同的结果。0x0B11

谢谢你的帮助!

更新:正如@Alex-Info.net 指出的那样,将双引号更改为单引号会将其\v视为字符串,但不幸的是我无法在这种情况下更改 PHP。

4

1 回答 1

2

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

<?= hash('sha256', '\v'); ?>

编辑:由于您不能更改 PHP 代码,以下是如何调整命令行,使其像 PHP 一样正确转义:

echo -e -n "\v" | openssl dgst -sha256, -e 启用转义。

于 2013-06-15T11:33:56.790 回答