【问题标题】:Python: Random System time seedPython:随机系统时间种子
【发布时间】:2015-02-01 06:38:16
【问题描述】:

在 python 中,假设我在一个有随机种子生成器的系统上,我如何让 random.seed() 来使用系统时间? (好像 /dev/urandom 不存在一样)

【问题讨论】:

  • 你不能用random.seed(time.time()这样的东西吗?
  • Python 不会自动生成随机种子吗?如果你不希望它是随机的,你应该只提供一个种子,我想?
  • 提出了一个显而易见的问题:为什么您要刻意避免使用优越的种子来支持系统时间?这对我来说是“XY 问题”。
  • 长话短说,参加 ctf 比赛。它被建模为没有实现 os.urandom 的服务器。至少,我认为是。

标签: python random time


【解决方案1】:

你可以的

import random
import time
random.seed(time.time())

【讨论】:

  • 来自该链接:“如果操作系统提供随机源,则使用它们而不是系统时间(有关可用性的详细信息,请参见 os.urandom() 函数)。”这是我要避免的。
  • 所以我不明白你的问题,你在找什么?
  • 您在寻找random.seed(time.time())吗?
【解决方案2】:
import random
from datetime import datetime
random.seed(datetime.now())

【讨论】:

    【解决方案3】:

    你知道这个库:PyRandLib吗?见:

    https://schmouk.github.io/PyRandLib/ to easily download archives versions, and
    https://github.com/schmouk/PyRandLib to get access to the code.
    

    该库包含许多一流的伪随机数生成器,同时其作用与 Python“内置”库 random 完全相同(只需解压缩或解压缩 'Lib/ 中下载的存档) site-packages/' Python 目录的子目录)。

    从代码和模块“fastrand32.py”中,您将获得一种更复杂的方法来随机提供当前时间的打乱版本。出于您的目的,这将变为:

    import time
    import random
    
    t = int( time.time() * 1000.0 )
    random.seed( ((t & 0xff000000) >> 24) +
                 ((t & 0x00ff0000) >>  8) +
                 ((t & 0x0000ff00) <<  8) +
                 ((t & 0x000000ff) << 24)   )
    

    这提供了一个主要优势:在很短的时间内,用于伪随机生成器的初始种子将在两次连续调用之间大不相同。

    【讨论】:

      【解决方案4】:

      截至 2021 年 12 月,更好的选择是使用“秘密”模块中的方法。你不再需要设置这样的种子了。

      Python Secrets Module查看更多信息

      【讨论】:

        猜你喜欢
        • 2019-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-16
        • 1970-01-01
        • 2011-05-18
        • 2021-07-28
        • 2016-08-12
        相关资源
        最近更新 更多