当前位置: 首页 > 面试题库 >

从python程序中禁用哈希随机化

隆安然
2023-03-14
问题内容

从Python
3.3开始,对哈希算法进行不确定性加盐处理,以避免发生某种攻击。这对Web服务器来说很好,但是在尝试调试程序时会很痛苦:每次运行脚本时,dict的内容都会以不同的顺序进行迭代。

某些早期的python版本具有-R用于 启用
哈希随机化的标志,但是由于它是默认行为,因此该标志并未被其相反的标志所取代。可以通过设置环境变量来禁用随机化PYTHONHASHSEED

虾仁

如果未将此变量设置为随机变量,则将使用随机值来播种str,bytes和datetime对象的哈希值。
如果PYTHONHASHSEED设置为整数值,则将其用作固定种子来生成哈希随机化所覆盖类型的hash()。

要注意的是,必须在启动python进程之前设置此变量。我尝试使用os.putenv()或在中设置它os.environ,但是这些似乎对哈希方法没有影响。这并不奇怪:我不希望python在每个单独的集合或字典查找之前检查环境!因此,问题仍然存在:

python程序是否有办法禁用自己的哈希随机化?


问题答案:

不幸的是,我怀疑这是不可能的。在介绍该行为的提交中添加了test_hash.pyHashRandomizationTests类及其子类的查看。他们通过修改环境并使用显式设置启动新进程来测试哈希行为。也许您可以尝试复制该模式。PYTHONHASHSEED

我还注意到您说:“ 每次我运行脚本时,字典内容都会以不同的顺序进行迭代。
”-我想您知道collections.OrderedDict吗?这是获得可靠的哈希迭代的正常方法。

如果您愿意在shell环境中设置该值,则也可以将python调用包装在bash脚本中,例如

#! /bin/bash
export PYTHONHASHSEED=0

# call your python program here

只要您可以使用包装脚本,就可以避免操纵整个环境。

甚至只是在命令行中传递值:

$ PYTHONHASHSEED=0 python YOURSCRIPT.py


 类似资料:
  • 问题内容: 我正在建立一个网站,并试图决定如何加密用户密码以将其存储在SQL数据库中。 我意识到使用简单的md5(password)是非常不安全的。我正在考虑使用sha512(password.salt),并且我一直在研究生成有用盐的最佳方法。我阅读了许多文章,指出盐应尽可能地随机以增加哈希值的熵,这似乎是个好主意。但: 您需要将随机盐与哈希一起存储 鉴于攻击者以某种方式可以访问您的哈希密码(并试

  • 我有一个函数(random_typle)参数作为一个随机元组,那么如何从元组的所有字段中获取散列呢?我可以使用tuple:bsize()之类的东西,还是应该迭代所有字段和计算哈希?

  • 问题内容: 我想在Python中实现HashMap。我想请用户输入。根据他的输入,我正在从HashMap中检索一些信息。如果用户输入HashMap的键,我想检索相应的值。 如何在Python中实现此功能? 问题答案: Python字典是一种内置的类型,支持键值对。 以及使用dict关键字: 要么:

  • 问题内容: 我正在使用此行为node.js生成sha1 id: 问题在于它每次都返回相同的id。 是否有可能每次都生成一个随机ID,因此我可以将其用作数据库文档ID? 问题答案: 在这里看看: 我将创建当前时间戳的哈希值+一个随机数,以确保哈希值唯一性:

  • 在PCF上部署spring云数据流2.1.2上的流(app)。 无法让生成的随机app前缀走开。 流部署期间尝试过的选项: deployer.*.cloudfoundy.enableRandomAppNamePrefix=false 尝试将以下环境变量传递给skipper-server 尝试将以下环境变量传递给数据流服务器: SPRING _ CLOUD _ data flow _ TASK _