Pseudo-Random-Generator
是否可以恢復 Python 的偽隨機數生成器使用的種子?
我使用 Python 腳本生成了一些隨機數。我有序列的前 40 個數字。有沒有辦法恢復種子或找到序列中的下一個 460 個數字?
這些數字是使用以下程式碼生成的。
import random i=1 mn = 1 mx = 2 while i<500: print(random.randint(mn,mx)) mn=mn*2 mx=mx*2 i=i+1
我有序列的前 40 個數字。有沒有辦法恢復種子或找到序列中的下一個 460 個數字?
首先要知道的是 Python 的 random 模組使用Mersenne Twister作為 PRNG。這不是一個加密安全的 RNG,事實上只要你有足夠的樣本就很容易恢復狀態。
您使用的 40 個大小數字不足以恢復完整的 MT 狀態並以這種方式找到下一個輸出。
當作業系統隨機性不可用時,恢復 Python 使用的時間種子就綽綽有餘了。您可以在最近的過去執行時間值的蠻力。然而,最新版本的 Python 2/3 會從 urandom 或類似的可用狀態初始化完整狀態,並且不能用這個小輸出來反轉。
(當然你仍然可以打電話
random.get_state()
,但大概你不是在問這個;)