Is there a significant overhead by using different versions of sha hashing (hashlib module)
假设我不想使用MD5,那么在使用sha1而不是sha512方面有很大的区别吗?我想使用像
这个开销是否存在,如果存在,它有多大?
为什么不只是基准测试呢?
1 2 3 4 5 6 7 8 9 10 11 12 | >>> def sha1(s): ... return hashlib.sha1(s).hexdigest() ... >>> def sha512(s): ... return hashlib.sha512(s).hexdigest() ... >>> t1 = timeit.Timer("sha1('asdf' * 100)","from __main__ import sha1") >>> t512 = timeit.Timer("sha512('asdf' * 100)","from __main__ import sha512") >>> t1.timeit() 3.2463729381561279 >>> t512.timeit() 6.5079669952392578 |
所以在我的机器上,
1 2 3 4 5 6 7 8 | >>> s ="asdf" >>> hash(s) -618826466 >>> s ="xxx" >>> hash(s) 943435 >>> hash("xxx") 943435 |
号
或者更好的是,使用内置的python字典。也许您可以告诉我们更多关于缓存的计划。
编辑:我认为你正在努力实现这样的目标:
1 2 | hash = hashlib.sha1(object_to_cache_as_string).hexdigest() cache[hash] = object_to_cache |
我在"使用内置的python dictionaries"中重新定义的是,您可以简化上面的内容:
1 | cache[object_to_cache_as_string] = object_to_cache |
。
这样,python就可以处理散列了,所以您不必这样做!
关于您的特定问题,您可以参考python hashable dicts,以使字典具有hashable属性。然后,缓存对象所需要做的就是:
1 | cache[object_to_cache] = object_to_cache |
也许是个幼稚的测试…但看起来这取决于你的哈希值。2块sha512比4块sha256快?
1 2 3 4 5 6 7 8 9 10 11 | >>> import timeit >>> import hashlib >>> for sha in [ x for x in dir(hashlib) if x.startswith('sha') ]: ... t = timeit.Timer("hashlib.%s(data).hexdigest()" % sha,"import hashlib; data=open('/dev/urandom','r').read(1024)") ... print sha +"\t" + repr(t.timeit(1000)) ... sha1 0.0084478855133056641 sha224 0.034898042678833008 sha256 0.034902095794677734 sha384 0.01980900764465332 sha512 0.019846916198730469 |
。