【问题标题】:How to sync up random generation of strings in Python如何在 Python 中同步随机生成的字符串
【发布时间】:2025-12-31 14:45:17
【问题描述】:

我如何确保随机算法为两个不同的程序生成相同的随机数。我正在尝试制作一个使用共享密码或密钥的聊天程序,然后使用该密钥生成一个随机字符串,该字符串只能对两个程序进行预测。

例如

A 人:asd4sa5d8s5s5d5sd 乙:asd4sa5d8s5s5d5sd

A 人:2SDASD5545S B人:2SDASD5545S

【问题讨论】:

  • 您可以使用 MD5 或 SHA1 等哈希算法,而不是使用随机数生成器。
  • -1。当您需要任何类型的安全性时,不要使用非加密 PRNG。除非您真正了解发生了什么,否则最好不要实现自己的加密。

标签: python random


【解决方案1】:

如果您想要基于密码的可预测安全字符串,为什么不直接使用use a hash?您可以使用Base64 encoding 将哈希编码为字符串。

如果您在散列之前将salt 添加到字符串中,那么人们将更难以使用暴力破解或rainbow table 攻击从散列返回密码。

>>> password = "asd4sa5d8s5s5d5sd"
>>> import hashlib, base64
>>> salt = "mysecretstring"
>>> m = hashlib.md5()
>>> m.update(salt)
>>> m.update(password)
>>> base64.b64encode(m.digest())
'NR6jEKdkVcfcT4pgBnF96A=='

【讨论】:

    【解决方案2】:

    使用random.seed,为两个客户端中的函数赋予相同的值。

    【讨论】:

      【解决方案3】:

      你应该创建一个 Random() 的私有实例。如果你只是按照通常的方式使用 random 模块,如果在程序的其他任何地方使用随机数,你将得到不可预知的结果

      from md5 import md5
      from random import Random
      
      hsh=md5("passphrase").hexdigest()
      seed = long(hsh,16)
      myrandom = Random()
      myrandom.seed(seed)
      print myrandom.randint(0,100)
      

      【讨论】: