2

我正在尝试在 php 中对一些十六进制字节进行 hmac 哈希。不确定我是否正确理解散列或十六进制表示,因为 2 个散列不匹配,例如

<?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";

要成为 d 的字符串hash_hmac是不同的,

     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 回答