我正在尝试编写随机密码生成器。我处于早期阶段,遇到了一些问题。使用下面的代码和屏幕截图,您可以看到我得到一个非常可预测的字符串(字符串为2)。每次我收到一个只填充一种号码的字符串。我应该如何编辑代码以生成更好的密码字符串? (除了不仅包括数字)
private void button1_Click(object sender, EventArgs e)
{
int characters = Convert.ToInt32(comboBox1.SelectedIndex);
string password = "";
for(int i = 0; i <= characters; i++)
{
password = password +charGen();
}
label2.Text = password;
}
private char charGen()
{
Random random = new Random();
char randomNumber = Convert.ToChar( random.Next(48, 57));
return randomNumber;
}
}
答案 0 :(得分:5)
只需将random
保留在班级范围内:
Random random = new Random();
private void button1_Click(object sender, EventArgs e)
{
int characters = Convert.ToInt32(comboBox1.SelectedIndex);
string password = "";
for(int i = 0; i <= characters; i++)
{
password = password +charGen();
}
label2.Text = password;
}
private char charGen()
{
char randomNumber = Convert.ToChar( random.Next(48, 57));
return randomNumber;
}
目前,每次拨打charGen
时,它的种子价值几乎相同。
答案 1 :(得分:3)
问题是,每次调用charGen
时,都会创建一个新的Random
,它会使用种子的当前时钟进行初始化。由于它们创建得如此之快,它们都会得到相同的种子。
您应该在班级创建一个Random
对象(或将其传递给charGen
)。
答案 2 :(得分:2)
为什么不使用Rnd()
代替Random
?
Private Function charGen() As Char
Return Chr(Asc("0"c) + Rnd() * 10)
End Function
然后在循环之前调用Randomize()
。
答案 3 :(得分:1)
您可以使用Membership.GeneratePassword方法
答案 4 :(得分:0)
使用 System.Web.Security.Membership.GeneratePassword(int length, int numberOfNonAlphanumericCharacters)