2010-08-03 56 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=='