2

私はphpでいくつかの16進バイトのhmacハッシュを実行しようとしています。2つのハッシュが一致しないため、ハッシュまたは16進表現を正しく理解しているかどうかわかりません。

<?php
echo bin2hex("\x32\x45\xff\xca".pack("N",1))."\n";
echo hash_hmac('sha1', '\x32\x45\xff\xca\x00\x00\x00\x01', 'secret')."\n";
echo hash_hmac('sha1', '\x32\x45\xff\xca'.pack("N",1), 'secret')."\n";

与える

3245ffca00000001
3710e984df2fe4c53e0a9760cf0480357c6e431c
6308db257308f3466430807eb622489c7fff84df

バイトは私には同じように見えますが、異なるハッシュを提供します...

4

2 に答える 2

1

何を推測するか、私が必要としたのは一重引用符の代わりに二重引用符を使用することであり、それらのハッシュは両方とも'\x32\x45\xff\xca\x00\x00\x00\x01'正しくありません。

それで

echo hash_hmac('sha1', "\x32\x45\xff\xca\x00\x00\x00\x01", 'secret')."\n";
echo hash_hmac('sha1', "\x32\x45\xff\xca".pack("N",1), 'secret')."\n";

正しいことを与える

cde1e3710b6265b77fd4ac84293e20d981e92a6a
cde1e3710b6265b77fd4ac84293e20d981e92a6a

微妙ですが本当です、ここでテストしてください

于 2013-01-02T08:01:42.633 に答える
0

これは、入力で次の理由があります。

      echo hash_hmac('sha1', '\x32\x45\xff\xca\x00\x00\x00\x01', 'secret')."\n";
      echo hash_hmac('sha1', '\x32\x45\xff\xca'.pack("N",1), 'secret')."\n";

hash_hmacdとなる文字列が異なります。

     echo '\x32\x45\xff\xca\x00\x00\x00\x01'; // output : \x32\x45\xff\xca\x00\x00\x00\x01
     echo '\x32\x45\xff\xca'.pack("N",1);     // output : \x32\x45\xff\xca

だからあなたの答えは違ってきます。

于 2013-01-02T06:17:52.043 に答える