SHA 1 hash_hmac错了

时间:2017-03-18 14:37:46

标签: php sha1

我对hash_hmac有一个很大的问题

功能

function hmac($key, $data){
    $blocksize = 64;
    $hashfunc = 'sha1';
    if (strlen($key) > $blocksize)
        $key = pack('H*', $hashfunc($key));
    $key = str_pad($key, $blocksize, chr(0x00));
    $ipad = str_repeat(chr(0x36), $blocksize);
    $opad = str_repeat(chr(0x5c), $blocksize);
    $hmac = pack('H*', $hashfunc(($key ^ $opad) . pack('H*', $hashfunc(($key ^ $ipad) . $data))));
    return bin2hex($hmac);
} 

示例是:

<?php
echo hmac('111111', '222222');//=1558ab6c5ab2b0d1cd129b9ad11527cf33486705

但我的

$jeden = 111111;
$dwa =222222;   
$hashWiadomosci = hash_hmac('sha1', $jeden, $dwa);

是:22f91d281349bb3081d3cec9f906572eec5c55b2

我怎么做错了?

1 个答案:

答案 0 :(得分:1)

您的输入变量输入顺序错误。如果你看一下the comment中的例子,你得到了这个;您可以看到它是hmacsha1($key, $data)而不是hmacsha1($data, $key),就像您使用它以及hash_hmac($algorithm, $data, $key)的工作方式一样。

echo hash_hmac('sha1', '111111', '222222'); // 22f91d2813...
echo hmacsha1('111111', '222222');          // 1558ab6c5a...

echo hash_hmac('sha1', '111111', '222222'); // 22f91d2813...
echo hmacsha1('222222', '111111');          // 22f91d2813...