2011-08-04 12 views
9

,Neden hashlib ve hmac farklı karma değerler üretiyor? Python 2.7 olarak

my = "my" 
key = "key" 
print(hashlib.sha256(my + key).hexdigest()) 
print(hmac.new(my, key, hashlib.sha256).hexdigest()) 

çıkışı,

5e50f405ace6cbdf17379f4b9f2b0c9f4144c5e380ea0b9298cb02ebd8ffe511 
15a55993a27e0de7a4c4daa67a7c219199a464ca283797f545b783cce07b38a5 

ya da ben yanlış anlamış?

+1

Cevabınız http://stackoverflow.com/questions/2836100/what-is-the-difference-between-a-hash-and-mac-message-authentication-code – Kracekumar

+0

ok teşekkürler. er dj –

cevap

23

hmachashlib sadece verilen mesaj sağlamalarının ederken, bir salt üretmek ve karma daha güçlü hale getirmek için key sağlanan kullanır olmasıdır.

hmac modül source code bakarak

, buradan hashlib modülü, kullanılan algoritma kullanılarak hmac aynı davranışı nasıl ulaşılacağını bulacaksınız (orijinal bir tane değil, ben bazı Kontrollerin sadece ilginç kısım olsun elimden) :

import hashlib 

MESSAGE = "msg" 
KEY = "key" 

trans_5C = "".join ([chr (x^0x5C) for x in xrange(256)]) 
trans_36 = "".join ([chr (x^0x36) for x in xrange(256)]) 

outer = hashlib.sha256() 
inner = hashlib.sha256() 

KEY = KEY + chr(0) * (inner.block_size - len(KEY)) 

outer.update(KEY.translate(trans_5C)) 
inner.update(KEY.translate(trans_36)) 
inner.update(MESSAGE) 
outer.update(inner.digest()) 

result = outer.hexdigest() 
print result # prints 2d93cbc1be167bcb1637a4a23cbff01a7878f0c50ee833954ea5221bb1b8c628 

aynı doğrudan hmac kullanarak: Yani

import hashlib 
import hmac 

result = hmac.new(KEY, MESSAGE, hashlib.sha256).hexdigest() 
print result # prints 2d93cbc1be167bcb1637a4a23cbff01a7878f0c50ee833954ea5221bb1b8c628 

hmac kullanırken, sahip olduğu sadece gelmez Belirtilen hashing algoritmasını kullanarak verilen mesajı hesaba katar, ayrıca karma'yı karmaşıklaştırmak için anahtarı kullanır.

İlgili konular