随机生成器不会生成超过1个密码

时间:2014-08-03 17:21:52

标签: c#

我用Windows窗体创建了一个随机密码生成器。

用户将选择密码的长度和将在Richtextbox中生成的密码数。

当我想生成超过1个密码时,会出现问题。

无论我怎么做,它一次都不会产生超过1个密码。

在下面发布代码。

string passwords = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890?!/@£#$%&[]+``^~*";
    Random pass = new Random();
    string passwordline { get; set; }
    private void button1_Click(object sender, EventArgs e)
    {
        passwordline = "";
        int passwordsNum = (int)numericUpDown1.Value;
        int passwordLength = (int)numericUpDown2.Value;
        int length = 0;

       for (int i = 0; i<passwordsNum; i++)
       {

        for (int i2 = 0; i2 < passwordLength; i2++)
        {
            int randomnumbers = pass.Next(passwords.Length);
            passwordline += passwords[randomnumbers];
            length++;

            if (passwordline.Length == passwordLength)
            {
                richTextBox1.Text += passwordline + Environment.NewLine;
            }
           }
          }
         }

2 个答案:

答案 0 :(得分:1)

似乎您可能无法在每次新运行时将密码重置为空。尝试将代码更改为:

for (int i = 0; i<passwordsNum; i++)
{
    passwordline = "";
    for (int i2 = 0; i2 < passwordLength; i2++)
    {
        //Other code is the same
    }
}

答案 1 :(得分:1)

您只需在两个密码之间添加一个新行,现在您可以生成“连接”成一个密码的字符序列(并删除一些错误):

string passwordline = "";
int passwordsNum = (int)numericUpDown1.Value;
int passwordLength = (int)numericUpDown2.Value;
for (int i = 0; i<passwordsNum; i++) {
    passwordline = "";
    for (int i2 = 0; i2 < passwordLength; i2++) {
        int randomnumbers = pass.Next(passwords.Length);
        passwordline += passwords[randomnumbers];
    }
    richTextBox1.Text += passwordline+"\n";
}

代码也更加优化:在if循环中使用for语句,而此代码永远不会执行,只需在语句结束时执行。