hmac kann man eigentlich ganz vergessen. Der ist so langsam das es keinen Sinn macht, diesen mit zu testen. Ansonsten dauert es ewig oder man muß die loop Anzahl so niedrig einstellen, das die anderen Tests keinen Sinn machen. Probiert es mal selber:
Code: Alles auswählen
import timeit, os, string
loop = 500000
TEST_STRING = string.ascii_letters + string.digits
tests = (
("hash('%s')" % TEST_STRING, ""),
("md5.new('%s').hexdigest()" % TEST_STRING, "import md5"),
("sha.new('%s').hexdigest()" % TEST_STRING, "import sha"),
#~ ("hmac.new('%s').hexdigest()" % TEST_STRING, "import hmac"),
)
for no, test in enumerate(tests):
print "%s - %s" % (no+1, test[0])
test = timeit.Timer(test[0], test[1])
print "%.2f" % test.timeit(number=loop)
print
Die Python hash() Funktion ist also ungeschlagen. Leider dürften damit aber recht schnell Kollisionen auftreten ;(1 - hash('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
Test: 0.09
2 - md5.new('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789').hexdigest()
Test: 0.83
3 - sha.new('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789').hexdigest()
Test: 0.99