我正在尝试使用sha-512来计算hmac.
Perl代码:
use Digest::SHA qw(hmac_sha512_hex); $key = "\x0b"x20; $data = "Hi There"; $hash = hmac_sha512_hex($data, $key); print "$hash\n";
并给出正确的哈希值
87aa7cdea5ef619d4ff0b4241a1d6cb02379f4e2ce4ec2787ad0b30545e17cde daa833b7d6b8a702038b274eaea3f4e4be9d914eeb61f1702e696c203a126854
Python版本:
import hashlib, hmac print hmac.new("\x0b"*20, "Hi There", hashlib.sha512).hexdigest()
它给出了错误的哈希值
9656975ee5de55e75f2976ecce9a04501060b9dc22a6eda2eaef638966280182 477fe09f080b2bf564649cad42af8607a2bd8d02979df3a980f15e2326a0a22a
任何想法为什么Python版本给我错误的哈希?
编辑:
版本是
darwin的Python 2.5.1(r251:54863,2009年1月13日,10:26:13)
[GCC 4.0.1(Apple Inc. build 5465)]
确实如此 - 似乎python2.5的Leopard版本是破坏的版本.
以下基于Penryn的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
在Leopard 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 >>>