SHA

2017-03-18 2 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); 
} 

예에 큰 문제가 잘못된 일 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); \t $ hmac = pack ('H *', $ hash^($ key^$ opad). pack ('H *', $ hashfunc ($ key^$ ipad). $ data)))); \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

내 잘못, 네 말이 맞아. –