如何確保隨機算法能夠爲兩個不同的程序生成相同的隨機數。我正在嘗試製作一個使用共享密碼或密鑰的聊天程序,然後使用該密鑰來生成一個隨機字符串,這個字符串只對這兩個程序都是可預測的。如何在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