1

PHPで次を実行すると

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

私はこのハッシュを取得します:

e7cf46a078fed4fafd0b5e3aff144802b853f8ae459a4f0c14add3314b7cc3a6

ただし、http://www.xorbin.com/tools/sha256-hash-calculator\vなどのオンライン ツールを使用すると、次のハッシュが得られます。

1b5cec8c46451b5375ea7e61f310fe831ad17f62098beb7a5bfce304821e3f78


PHP は明らかに、実際の文字列ではなく、エスケープされた値をハッシュしていることに気付きました。

\v    垂直タブ (VT または ASCII の 0x0B (11)) (PHP 5.2.5 以降)

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

VTしかし、私が理解しようとしているのは、コマンド ラインまたはオンライン ツールの 1 つを使用して PHP 関数と同じ結果を得るvt方法0x0Bです11

ご協力いただきありがとうございます!

更新: @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 に答える