2013-01-02 40 views
2

我想在php中做一些十六進制字節的hmac散列。不確定是否正確理解散列或十六進制表示,因爲2個散列不匹配,例如hash_hmac如何處理十六進制輸入?

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

的字節數似乎是相同的,以我呢,他們給不同的哈希...

回答

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 

微妙的,但真正的,考出來here

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_hmac d是不同的,

 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 

這就是爲什麼你的答案快到了不同。

+0

請使用正確的拼寫和語法的努力。使用像「ur」和「ans」這樣的網絡語音讓你的帖子很難閱讀*。 – Charles