2013-04-01 106 views
1

我想生成隨機數 - 除了給予相同的種子,他們應該永遠是相同的。這怎麼能做到?產生可預測的隨機數C#

例如鑑於種子'我喜歡海龜',它應該產生一個數字,例如1234無論何時/多少次被調用。我需要這個安全應用程序。

+0

可能重複:http://stackoverflow.com/questions/4060961/seeding-a-pseudo-random-number-generator- in-c-sharp –

+1

你知道可預測的隨機是一個矛盾。 – Romoku

+11

'var random = new Random(「I like turtles」.GetHash())' –

回答

2

這正是如何僞隨機數生成器(PRNG)的工作。當以相同的方式播種時,它們產生相同的僞隨機數序列。

看一看的說明文件Random類的構造:

提供相同的種子值不同的隨機的對象導致每個實例以產生隨機數的相同的序列。

只要注意PRNGs使用數字種子而不是字符串,按照問題中的示例。如果你需要一個密碼安全的PRNG,那麼你需要使用Random以外的類,儘管關於種子的相同原則也適用。

+0

+0。與OP的需求無關 –

+0

@SamIam我不明白你的意思 –

+0

這就是爲我帶來答案的原因。這將是很好,但有一行代碼:) – James

0

Random類會產生相同的數字序列,如果您使用相同的種子提供它。

如果你只是想從一個給定的字符串返回一個可預測的數量,使用hash

0

如果你正在做的安全,你真的會得到更好的利用圖書館服務的,但如果你絕對必須自己做...

看起來你寧願計算散列碼。

here is some information on generating a MD5 hash code from a string

下面是該網頁上的代碼示例

public static string CalculateMD5Hash(string strInput) 
{ 
    MD5 md5 = System.Security.Cryptography.MD5.Create(); 
    byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(strInput); 
    byte[] hash = md5.ComputeHash(inputBytes);    

    StringBuilder sb = new StringBuilder();   
    for (int i = 0; i < hash.Length; i++)   
    {    
    sb.Append(hash[i].ToString("x2")); 
    }   
    return sb.ToString();  
}