SHA

2017-03-18 7 views
1

は私がhash_hmacSHA

機能

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); 
} 

例との大きな問題を抱えている間違った1 hash_hmacは次のとおりです。

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

が、私の

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

です:22f91d281349bb3081d3cec9f906572eec5c55b2

どうやって間違っていますか?

+0

'hmac()'とは何ですか? –

+0

関数hmac($ key、$ data){ \t $ blocksize = 64; \t $ hashfunc = 'sha1'; \t if(strlen($ key)> $ blocksize) \t \t $ key = pack( 'H *'、$ hashfunc($ key)); \t $ key = str_pad($ key、$ blocksize、chr(0x00)); \t $ ipad = str_repeat(chr(0x36)、$ blocksize); \t $ opad = str_repeat(chr(0x5c)、$ blocksize); (HKEY_LOCAL_MACHINE \ SOFTWARE \ HOWTO)$ HACK = pack( 'H *'、$ hash $) \t return bin2hex($ hmac); } –

+0

あなたはあなたの質問を編集する必要がありますhttp://stackoverflow.com/posts/42875689/editコメントにコードをドロップしないで、ありがとう。 –

答えて

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... 
+0

彼らは2つの別々の方法を使用しています –

+0

@ Fred-ii-どういう意味ですか?質問のコードをコピーしました...私のコード[ここ](https://tomudding.nl/tests/test9.php)をチェックすることができます。 –

+0

私の悪い、あなたが正しいです。 –