我正在使用hash
在整数和字符串的元组(以及整数和字符串的嵌套元组等),以便计算一些对象的唯一性。除了可能存在散列冲突,我不知道 - 那些保证为不同版本的Python返回相同结果的数据类型的hash
函数?从Python中的32位和64位版本之间的长期分歧除了python的散列函数在不同版本中保持相同吗?
3
A
回答
6
号,散列算法was changed in Python 3.3以解决安全问题:
默认情况下,哈希()的值str,bytes和datetime对象被一个不可预知的随机值“盐化”。虽然它们在单独的Python过程中保持不变,但在重复调用Python之间它们是不可预测的。
这是为了防止由精心挑选的输入引起的拒绝服务,这些输入利用了dict插入的最坏情况性能,O(n^2)复杂度。详情请参阅http://www.ocert.org/advisories/ocert-2011-003.html。
更改散列值会影响字典,集合和其他映射的迭代顺序。 Python从来没有对这个顺序做过保证(它通常在32位和64位版本之间变化)。
因此,从3.3开始hash()
甚至不能保证在同一个Python版本的不同调用中返回相同的结果。
3
编号例如:
32位
Python 2.7.3 (default, Aug 1 2012, 05:16:07)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> hash("foobar")
-1969371895
64位
Python 2.7.3 (default, Aug 1 2012, 05:14:39)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> hash("foobar")
3433925302934160649
3
我不知道你在找什么,但你可以随时使用hashlib
如果你正在寻找一致的哈希值。
>>> import hashlib
>>> t = ("values", "other")
>>> hashlib.sha256(str(t)).hexdigest()
'bc3ed71325acf1386b40aa762b661bb63bb72e6df9457b838a2ea93c95cc8f0c'
OR:
>>> h = hashlib.sha256()
>>> for item in t:
... h.update(item)
...
>>> h.hexdigest()
'5e98df135627bc8d98250ca7e638aeb2ccf7981ce50ee16ce00d4f23efada068'
相关问题
- 1. Python MD5散列相同的内容返回不同的散列
- 2. 跨不同会话散列python函数
- 3. 增加版本但保持ProductCode相同?
- 4. Crypt函数为相同的密码生成相同的散列
- 5. 支持不同版本的Python
- 6. 表列不保持相同的宽度
- 7. sys.getsizeof()在不同的机器和相同的Python版本
- 8. Django在不同的Python版本中
- 9. 使用不同版本的相同库
- 10. 在Python中绑定相同的函数
- 11. 具有不同名称和相同内容的文件的散列函数
- 12. nginx转发后保持域相同吗?
- 13. 不同版本的相同脚本与同一个python安装的软件包
- 14. 如何在不同版本中保持单个XPO?
- 15. 保持相同高度的列
- 16. 哈希函数,在相同的桶中散列相似的字符串
- 17. 不同了在Java相同的函数的Python
- 18. SHA将相同的字符串散列到不同的块中
- 19. 在不同版本的软件上保留持久信息
- 20. 保持相同的变量在不同的活动表
- 21. 在不同版本的postgresql中给出不同结果的相同查询!
- 22. 使HTML列保持相同大小
- 23. 不同语言的memcache客户端以相同的方式散列吗?
- 24. matplotlib散射阵列长度不相同
- 25. 我们可以在发布的iTunes Connect中保留相同的版本号吗?
- 26. 在同一个过程中使用不同版本的python库
- 27. Python:如何让不同版本的python访问相同的模块?
- 28. 在不同文件中具有相同名称的不同类版本
- 29. 保持相同数量的列在交叉表报告
- 30. SHA256加密和解密(Python 2.7) - 相同的词,但不同的散列
这将是我的答案了!谢谢,我会找到另一种方式。 – Claudiu 2013-05-09 00:32:46