我正在尝试在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
这些字节对我来说似乎是相同的,但它们给出了不同的哈希...
答案 0 :(得分: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
答案 1 :(得分: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
这就是为什么你的答案会有所不同。