لماذا أحصل على نتائج خاطئة لHMAC في بيثون ولكن ليس بيرل؟
سؤال
وأنا أحاول لحساب HMAC باستخدام SHA-512.
ورمز بيرل:
use Digest::SHA qw(hmac_sha512_hex);
$key = "\x0b"x20;
$data = "Hi There";
$hash = hmac_sha512_hex($data, $key);
print "$hash\n";
وويعطي التجزئة الصحيحة
87aa7cdea5ef619d4ff0b4241a1d6cb02379f4e2ce4ec2787ad0b30545e17cde
daa833b7d6b8a702038b274eaea3f4e4be9d914eeb61f1702e696c203a126854
ونسخة بايثون:
import hashlib, hmac
print hmac.new("\x0b"*20, "Hi There", hashlib.sha512).hexdigest()
والذي يعطي التجزئة غير صحيحة
9656975ee5de55e75f2976ecce9a04501060b9dc22a6eda2eaef638966280182
477fe09f080b2bf564649cad42af8607a2bd8d02979df3a980f15e2326a0a22a
وأي أفكار لماذا النسخة بيثون هو إعطائي تجزئة خاطئة؟
وتحرير:
الإصدار هو
بايثون 2.5.1 (r251: 54863، 13 يناير 2009، 10:26:13)
[GCC 4.0.1 (شركة أبل بناء 5465)] على داروين
المحلول
ونعم في الواقع - يبدو أن نسخة ليوبارد من 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
dpc@lizard-wifi:~$ **which python**
/usr/bin/python
وتشغيل هذا الإصدار المثبت في ليوبارد OS
dpc@lizard-wifi:~$ 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
>>>
وبعد ذلك النسخة MacPorts من 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
>>>
نصائح أخرى
وأنا غير قادر على تكرار النتائج الخاصة بك هنا. في IDLE باستخدام بايثون 2.5:
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
وأي إصدار من بيثون؟ السلاسل Unicode في بيثون 3. هل هذه قضية يونيكود؟
وتحت الثعبان 2.5.2 أحصل الصحيح التجزئة
اعتقد ان النسخة القديمة مشكلة
لا تنتمي إلى StackOverflow