gpt4 book ai didi

python - 使用不同版本的 sha 散列(hashlib 模块)是否有显着的开销

转载 作者:太空狗 更新时间:2023-10-29 17:15:08 25 4
gpt4 key购买 nike

hashlib Python 模块提供了以下哈希算法构造函数:md5()sha1()sha224()sha256()sha384()sha512()

假设我不想使用 md5,使用 sha1 而不是 sha512 有很大的不同吗?我想使用类似 hashlib.shaXXX(hashString).hexdigest() 的东西,但因为它只是用于缓存,所以我不确定我是否需要 512 的(最终)额外开销...

这种开销是否存在,如果存在,有多大?

最佳答案

为什么不直接对其进行基准测试?

>>> 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

所以在我的机器上,hash512sha1 慢两倍。但是作为GregS说,为什么要使用安全哈希进行缓存?尝试内置的哈希算法,它应该非常快且经过调整:

>>> 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

编辑 - 关于 Python3 的注释

Python 3.3 引入了哈希随机化,这意味着计算出的哈希值在不同进程中可能不同,因此您不应依赖计算出的哈希值,除非将 PYTHONHASHSEED 环境变量设置为 0。

引用资料: - https://docs.python.org/3/reference/datamodel.html#object.hash - https://docs.python.org/3/using/cmdline.html#envvar-PYTHONHASHSEED

关于python - 使用不同版本的 sha 散列(hashlib 模块)是否有显着的开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2241013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com