生成可预测的随机数C#

时间:2013-04-01 15:22:36

标签: c# .net

我想生成随机数 - 除了给出相同的种子,它们应该始终相同。怎么可以这样做?

e.g。鉴于种子'我喜欢海龟'它应该产生一个数字,例如1234无论何时/多少次被召唤。我需要这个用于安全应用程序。

3 个答案:

答案 0 :(得分:2)

这正是伪随机数生成器(PRNG)的工作原理。当以相同的方式播种时,它们产生相同的伪随机数序列。

查看Random类的构造函数的文档:

  

为不同的Random对象提供相同的种子值会导致每个实例产生相同的随机数序列。

请注意,根据问题中的示例,PRNG使用数字种子而不是字符串。如果你需要一个加密安全的PRNG,那么你需要使用Random以外的类,尽管有关种子的相同原则适用。

答案 1 :(得分:0)

Random类将生成相同的数字序列,如果您为它提供相同的种子。

如果您只想从给定字符串返回可预测的数字,请使用hash

答案 2 :(得分: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();       
}