2024-05-13 09:26:20 发布
网友
Python模块提供以下哈希算法构造函数:md5()、sha1()、sha224()、sha256()、sha384()和sha512()。
md5()
sha1()
sha224()
sha256()
sha384()
sha512()
假设我不想使用md5,那么使用sha1而不是sha512有什么区别吗?我想使用类似hashlib.shaXXX(hashString).hexdigest()的东西,但由于它只是用于缓存,我不确定是否需要(最终)512的额外开销。。。
hashlib.shaXXX(hashString).hexdigest()
这种开销是否存在,如果存在,它有多大?
也许是个幼稚的测试。。。但这似乎取决于你的散列量。2块sha512比4块sha256快?
>>> 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
为什么不做基准测试呢?
>>> 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
所以在我的机器上,hash512的速度是sha1的两倍。但正如GregS所说,为什么要使用安全哈希进行缓存?请尝试内置哈希算法,该算法应该非常快速并经过调整:
hash512
sha1
>>> s = "asdf" >>> hash(s) -618826466 >>> s = "xxx" >>> hash(s) 943435 >>> hash("xxx") 943435
或者更好的是,使用内置的Python字典。也许你可以告诉我们更多关于缓存的计划。
编辑: 我想你是想达到这样的目的:
hash = hashlib.sha1(object_to_cache_as_string).hexdigest() cache[hash] = object_to_cache
我刚才提到的“使用内置Python词汇表”是,您可以简化上面的内容:
cache[object_to_cache_as_string] = object_to_cache
以这种方式,Python负责散列,所以您不必这样做!
关于您的特定问题,您可以参考Python hashable dicts,以便使字典可散列化。然后,缓存对象所需做的就是:
cache[object_to_cache] = object_to_cache
也许是个幼稚的测试。。。但这似乎取决于你的散列量。2块sha512比4块sha256快?
为什么不做基准测试呢?
所以在我的机器上,
hash512
的速度是sha1
的两倍。但正如GregS所说,为什么要使用安全哈希进行缓存?请尝试内置哈希算法,该算法应该非常快速并经过调整:或者更好的是,使用内置的Python字典。也许你可以告诉我们更多关于缓存的计划。
编辑: 我想你是想达到这样的目的:
我刚才提到的“使用内置Python词汇表”是,您可以简化上面的内容:
以这种方式,Python负责散列,所以您不必这样做!
关于您的特定问题,您可以参考Python hashable dicts,以便使字典可散列化。然后,缓存对象所需做的就是:
相关问题 更多 >
编程相关推荐