Python 中同一个字符串的 hash 值在不同机器上为啥不一样?

2021-07-05 16:24:16 +08:00
 nullboy
2434 次点击
所在节点    Python
8 条回复
lithiumii
2021-07-05 16:25:59 +08:00
代码贴一贴,运行环境贴一贴,你这样问,我只能说为啥我这儿不同机器上值一样
Alias4ck
2021-07-05 16:29:11 +08:00
Rush9999
2021-07-05 16:29:14 +08:00
用 hashlib,你用自带的 hash 肯定不一样
md5 = hashlib.md5()
md5.update('how to use md5 in python hashlib?'.encode('utf-8'))
print(md5.hexdigest())
Alias4ck
2021-07-05 16:30:28 +08:00
准确来说在同一台机器上的不同 session 下的同一个字符 hash 值也不一样 详情可看上面 stackoverflow 解释
knightdf
2021-07-05 16:31:10 +08:00
本来就不保证相同,你同一个机器开 2 个 python 运行出来的 hash 值都不同,build-in 的 hash 加了随机数,只是用来快速比较 dict 的 key 的
Trim21
2021-07-05 16:35:32 +08:00
内置的 hash 函数并不保证不同机器中相同的值得到相同 hash 结果,要夸机器比较哈希值是否相等应该用 hashlib 里面提供的算法。
fengjianxinghun
2021-07-05 18:24:39 +08:00
主要是防止 hash 碰撞 ddos 攻击
JeffGe
2021-07-05 19:06:18 +08:00
这事 Python 官方文档就有说明
https://docs.python.org/zh-cn/3/reference/datamodel.html#object.__hash__

> 注解 在默认情况下,str 和 bytes 对象的 __hash__() 值会使用一个不可预知的随机值“加盐”。 虽然它们在一个单独 Python 进程中会保持不变,但它们的值在重复运行的 Python 间是不可预测的。
这种做法是为了防止以下形式的拒绝服务攻击:通过仔细选择输入来利用字典插入操作在最坏情况下的执行效率即 O(n^2) 复杂度。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/787660

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX