如何确保随机算法能够为两个不同的程序生成相同的随机数。我正在尝试制作一个使用共享密码或密钥的聊天程序,然后使用该密钥来生成一个随机字符串,这个字符串只对这两个程序都是可预测的。如何在Python中同步随机生成的字符串
例如
人答:asd4sa5d8s5s5d5sd 某乙:asd4sa5d8s5s5d5sd
人答:2SDASD5545S 某乙:2SDASD5545S
如何确保随机算法能够为两个不同的程序生成相同的随机数。我正在尝试制作一个使用共享密码或密钥的聊天程序,然后使用该密钥来生成一个随机字符串,这个字符串只对这两个程序都是可预测的。如何在Python中同步随机生成的字符串
例如
人答:asd4sa5d8s5s5d5sd 某乙:asd4sa5d8s5s5d5sd
人答:2SDASD5545S 某乙:2SDASD5545S
使用random.seed
,给予相同的值给函数在两个客户端。
您应该创建一个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)
消耗其他地方如果你想基于密码为什么不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=='
而不是使用随机数发生器,你可以使用像MD5或SHA1哈希算法。 – Kylotan 2010-08-03 13:04:37
-1。当您需要任何安全性时,请勿使用非加密PRNG。最好不要实现你自己的加密,除非你真的明白发生了什么。 – 2010-08-06 17:19:17