栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python 3.3中的哈希函数在会话之间返回不同的结果

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python 3.3中的哈希函数在会话之间返回不同的结果

Python使用随机散列种子,通过向您发送旨在冲突的密钥来防止攻击者对应用程序进行处理。请参阅原始漏洞披露。通过使用随机种子(在启动时设置一次)偏移哈希值,攻击者无法再预测哪些键会发生冲突。

您可以通过设置

PYTHONHASHSEED
环境变量来设置固定种子或禁用功能;默认值为,
random
但您可以将其设置为固定的正整数值,同时
0
完全禁用该功能。

Python 2.7和3.2版本默认情况下禁用此功能(使用

-R
开关或将
PYTHonHASHSEED=random
其启用);默认在Python
3.3及更高版本中启用。

如果您依赖于Python集合中键的顺序,那么就不用了。Python使用哈希表来实现这些类型,它们的顺序取决于插入和删除历史记录以及随机哈希种子。请注意,在Python 3.5及更低版本中,这也适用于字典。

另请参见

object.__hash__()
特殊方法文档:

注意
:默认情况下,

__hash__()
str,bytes和datetime对象的值使用不可预测的随机值“加盐”。尽管它们在单个Python进程中保持不变,但在重复调用Python之间是不可预测的。

这旨在提供保护,防止由于精心选择的输入而导致的拒绝服务,这些输入利用了dict插入的最坏情况的性能O(n ^
2)复杂性。有关详细信息,请参见http://www.ocert.org/advisories/ocert-2011-003.html。

更改哈希值会影响字典,集合和其他映射的迭代顺序。Python从未保证过这种顺序(通常在32位和64位版本之间有所不同)。

另请参阅

PYTHONHASHSEED

如果需要稳定的哈希实现,则可能需要查看

hashlib
模块;这实现了加密哈希函数。该pybloom项目采用这种做法。

由于偏移量由前缀和后缀(分别为起始值和最终XORed值)组成,因此,不幸的是,您不能仅存储偏移量。从正面来看,这确实意味着攻击者也无法通过定时攻击轻松确定偏移量。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/391359.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号