2009-03-05 3 views
2

sha-512를 사용하여 hmac를 계산하려고합니다.왜 hmac이 파이썬에서는 잘못된 결과를 얻지 만 Perl에서는 잘못된 결과를 얻지 못합니까?

펄 코드 :

9656975ee5de55e75f2976ecce9a04501060b9dc22a6eda2eaef638966280182 
477fe09f080b2bf564649cad42af8607a2bd8d02979df3a980f15e2326a0a22a 
,174의 잘못된 해시를 제공

import hashlib, hmac 

print hmac.new("\x0b"*20, "Hi There", hashlib.sha512).hexdigest() 

:

use Digest::SHA qw(hmac_sha512_hex); 

$key = "\x0b"x20; 
$data = "Hi There"; 

$hash = hmac_sha512_hex($data, $key); 
print "$hash\n"; 

87aa7cdea5ef619d4ff0b4241a1d6cb02379f4e2ce4ec2787ad0b30545e17cde 
daa833b7d6b8a702038b274eaea3f4e4be9d914eeb61f1702e696c203a126854 

파이썬 버전의 올바른 해시를 제공합니다

파이썬 버전이 나에게 잘못된 해시를 제공하는 이유는 무엇입니까?

편집 :
버전
파이썬 2.5.1입니다 (R251 : 54,863 2009 년 1 월 13 일 10시 26분 13초)
[GCC 4.0.1 (애플사가 5465을 구축)] 다윈

+0

의 MacPorts의 버전하십시오 버전 정보를 제공하십시오 –

+0

그건 ... 정말 이상한 버전 문자열입니다. 귀하의 2.5.1은 나의 (구식 인) 2.5.2보다 새로운 * 올해 *입니까? 참으로 이상한 일입니다. 아마도 2.5.4로 업데이트를 시도해보십시오 (패키지를 손상시키지 않아야 함)? – kquinn

답변

9

문제이었다고 생각한다 올바른 해시를 얻을 예 실제로 - 그것은 python2.5의 레오파드 버전을 보인다 부서진 사람입니다. 이 버전을 실행하는 펜린 기반의 MBP에 실행 아래

이 ...

$ **uname -a** 
Darwin lizard-wifi 9.6.0 Darwin Kernel Version 9.6.0: Mon Nov 24 17:37:00 PST 2008; root:xnu-1228.9.59~1/RELEASE_I386 i386 
[email protected]:~$ **which python** 
/usr/bin/python 

[email protected]:~$ python 
Python 2.5.1 (r251:54863, Jan 13 2009, 10:26:13) 
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import hashlib, hmac 
>>> print hmac.new("\x0b"*20, "Hi There", hashlib.sha512).hexdigest() 
9656975ee5de55e75f2976ecce9a04501060b9dc22a6eda2eaef638966280182477fe09f080b2bf564649cad42af8607a2bd8d02979df3a980f15e2326a0a22a 
>>> 

그리고 레오파드 OS에 설치 한 후 python2.5

$ /opt/local/bin/python2.5 
Python 2.5.4 (r254:67916, Feb 3 2009, 21:40:31) 
[GCC 4.0.1 (Apple Inc. build 5488)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import hashlib, hmac 
>>> print hmac.new("\x0b"*20, "Hi There", hashlib.sha512).hexdigest() 
87aa7cdea5ef619d4ff0b4241a1d6cb02379f4e2ce4ec2787ad0b30545e17cdedaa833b7d6b8a702038b274eaea3f4e4be9d914eeb61f1702e696c203a126854 
>>> 
0

어떤 버전의 파이썬입니까? 문자열은 파이썬 3에서 유니 코드입니다. 유니 코드 문제입니까?

+0

Python 2.5.1, OS X 10.5의 기본 버전입니다. ("a")는 str이고, 타입 (u "a")는 무엇이든 말하면 유니 코드입니다. – cobbal

1

여기에 결과를 복제 할 수 없습니다. 파이썬 2.5을 사용하여 IDLE에서 :

Python 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)] on win32 Type "copyright", "credits" or "license()" for more information. 

... 

IDLE 1.2.2  
>>> import hashlib, hmac 
>>> print hmac.new("\x0b"*20, "Hi There", hashlib.sha512).hexdigest() 
87aa7cdea5ef619d4ff0b4241a1d6cb02379f4e2ce4ec2787ad0b30545e17cdedaa833b7d6b8a702038b274eaea3f4e4be9d914eeb61f1702e696c203a126854 
+0

동일한 결과가 여기에 있으며, PHP에서도 마찬가지입니다. – flussence

0

파이썬 2.5.2에서 나는
내가 이전 버전

+0

다른 질문을 추가하는 대신 원래 질문을 업데이트하십시오. :) –

관련 문제