2

I'm trying to compute hmac using sha-512.

The Perl code:

use Digest::SHA qw(hmac_sha512_hex);

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

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

and gives the correct hash of

87aa7cdea5ef619d4ff0b4241a1d6cb02379f4e2ce4ec2787ad0b30545e17cde  
daa833b7d6b8a702038b274eaea3f4e4be9d914eeb61f1702e696c203a126854

Python version:

import hashlib, hmac

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

which gives the incorrect hash of

9656975ee5de55e75f2976ecce9a04501060b9dc22a6eda2eaef638966280182
477fe09f080b2bf564649cad42af8607a2bd8d02979df3a980f15e2326a0a22a

any ideas why the Python version is giving me the wrong hash?

Edit:
version is
Python 2.5.1 (r251:54863, Jan 13 2009, 10:26:13)
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin

brian d foy
  • 129,424
  • 31
  • 207
  • 592
cobbal
  • 69,903
  • 20
  • 143
  • 156
  • Please provide version information – S.Lott Mar 05 '09 at 00:33
  • That's... a really odd version string. Your 2.5.1 is a *year* newer than my (outdated) 2.5.2? That's unusual indeed. Perhaps try updating to 2.5.4 (which shouldn't break any packages)? – kquinn Mar 05 '09 at 00:39

4 Answers4

9

yes indeed -- it seems the Leopard version of python2.5 is the one that is broken.

below run on a Penryn-based 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

Running this version installed in 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
>>> 

And then the MacPorts version of 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
>>> 
popcnt
  • 4,519
  • 1
  • 16
  • 14
1

I am unable to replicate your results here. In IDLE using Python 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
kquinn
  • 10,433
  • 4
  • 35
  • 35
0

Which version of Python? Strings are Unicode in Python 3. Is this a Unicode issue?

Greg Hewgill
  • 951,095
  • 183
  • 1,149
  • 1,285
  • Python 2.5.1, default on OS X 10.5 I believe. type("a") is str, type(u"a") is unicode if that says anything – cobbal Mar 05 '09 at 00:34
0

Under python 2.5.2 I get the correct hash
I guess the old version was the problem

cobbal
  • 69,903
  • 20
  • 143
  • 156