生成一批随机密码

生成随机密码很简单。 但是生成批次更加困难。

public static string getRandomPassword(int letters, int getallen) { //int letters = 8; //int getallen = 5; char[] letterdeel = new char[letters]; int minGetal = (int)Math.Pow(10, getallen - 1); int maxGetal = (int)Math.Pow(10, getallen); string password; Random r = new Random(); int test = (int)(DateTime.Now.Ticks); for (int i = 0; i < letters; i++) { r = new Random((int)(DateTime.Now.Ticks) + i); bool capital = r.Next(2) == 0 ? true : false; if (capital) { letterdeel[i] = (char)r.Next(65, 91); } else { letterdeel[i] = (char)r.Next(97, 123); } } password = new string(letterdeel); password += r.Next(minGetal, maxGetal); return password; } 

这是我的方法,密码应该是某种字母数字格式。 这工作正常,但如果我有一个for循环从这个方法拉100密码,在我的数组我有5-8相同的密码,然后再5-8相同的传递。

我知道为什么会这样,因为它依赖于随机function和时钟,但我该如何解决这个问题呢?

将随机数生成器定义为函数外部的静态。

如果没有Thread.Sleep(300),如何在这个类中获得真正的随机性?

如果您反复调用它,请将Random r移动到方法外部。 您将在相同的相对时间范围内多次击中它,因此您将生成相同的种子。 你也想摆脱下面这一行。 这是不必要的,并且(再次) 具有DateTime的性质。现在 ,您将继续生成相同的“随机”数字序列。

 r = new Random((int)(DateTime.Now.Ticks) + i); 

使用集合而不是存储的任何集合,并且不循环100次,但直到集合中有100个项目。