2010-08-03 37 views
0

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

例如

人答:asd4sa5d8s5s5d5sd 某乙:asd4sa5d8s5s5d5sd

人答:2SDASD5545S 某乙:2SDASD5545S

+1

而不是使用随机数发生器,你可以使用像MD5或SHA1哈希算法。 – Kylotan 2010-08-03 13:04:37

+0

-1。当您需要任何安全性时,请勿使用非加密PRNG。最好不要实现你自己的加密,除非你真的明白发生了什么。 – 2010-08-06 17:19:17

回答

2

使用random.seed,给予相同的值给函数在两个客户端。

0

您应该创建一个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) 
3

消耗其他地方如果你想基于密码为什么不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=='