Python doc人说:

默认情况下,str and bytes个对象的__hash__()个值将使用不可预测的随机值进行"加盐".尽管它们在单独的Python进程中保持不变,但在重复调用Python之间是不可预测的. 这旨在提供保护,防止由精心 Select 的输入引起的拒绝服务,这些输入利用了字典插入的最坏情况性能,O(n2)复杂性.

the algorithm used for computing hash()%的数字是确定性的.(它只对字符串和字节使用SALT).出于同样的原因,为什么攻击者不能使用整数来运行DoS?

推荐答案

PythonBug跟踪器(Issue 13703)捕捉到了导致这个 Select 的许多讨论.

特别重要的因素是:

  1. JSON和XML-RPC消息总是用字符串而不是int解释为Dict键.(参见来自主题JSONXML-RPC的相关消息.)因此,在最可信的安全威胁上下文中(在Web上的服务中发出的请求),int散列被认为不太可能导致问题.在这一点上并没有JSON%的共识:this message has a dissenting view.

  2. "使用更复杂的散列算法会减慢使用 数字作为字典关键字,也很难实现 非整数类型,如浮点数、长整型和复数.

基本上,获胜的观点是,更改的安全优势胜过了对字符串和bytes对象的性能影响,而不是对数字类型的影响.

Python相关问答推荐

aiohTTP与pytest的奇怪行为

预期LP_c_Short实例而不是_ctyles.PyCStructType

Pandas 按照特殊规则保留每n行

云上Gunicorn的Flask-socketIO无法工作

在Python中使用一行try

Tkinter滑动条标签.我不确定如何删除滑动块标签或更改其文本

在for循环中仅执行一次此操作

拆分pandas列并创建包含这些拆分值计数的新列

如何通过多2多字段过滤查询集

在Python和matlab中显示不同 colored颜色 的图像

如何让 turtle 通过点击和拖动来绘制?

我从带有langchain的mongoDB中的vector serch获得一个空数组

仿制药的类型铸造

非常奇怪:tzLocal.get_Localzone()基于python3别名的不同输出?

使用miniconda创建环境的问题

通过Selenium从页面获取所有H2元素

聚合具有重复元素的Python字典列表,并添加具有重复元素数量的新键

在Mac上安装ipython

PyQt5,如何使每个对象的 colored颜色 不同?'

Tkinter菜单自发添加额外项目