c#中的密码生成器

时间:2011-03-11 04:53:03

标签: c# asp.net

我想在ASP.NET C#Web应用程序中创建一个随机密码生成器。

我创建了它,但它仅适用于整数格式。如果我给任何字符它显示调试错误为“我的输入格式错误”。

但我想输入字符串和整数。例如,我的文本框字段可能是

  

DFT-001

我想为这个值设置一个随机密码,而且我的长度应该仅限于8位数或字符。

我目前的代码:

public static string CreateRandomPassword(int PasswordLength)
    {

        string _allowedChars = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789-";
        Random randNum = new Random();
        char[] chars = new char[PasswordLength];
        int allowedCharCount = _allowedChars.Length;

        for (int i = 0; i < PasswordLength; i++)
        {
            chars[i] = _allowedChars[(int)((_allowedChars.Length) * randNum.NextDouble())];
        }

        return new string(chars);
    }


protected void Button1_Click(object sender, EventArgs e)
    {
        userid.Text = "Your id is:     " + id.Text;
        if(id .Text!="")
        {

            string myInt = id.Text.ToString(); 
            password.Text = "Your password is: " + CreateRandomPassword(int.Parse(myInt)); 
        }
       }

7 个答案:

答案 0 :(得分:4)

根据您的要求,您可以采取一些措施来纠正此问题。

public static string CreateRandomPassword()  //If you are always going to want 8 characters then there is no need to pass a length argument
    {
        string _allowedChars = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789-";
        Random randNum = new Random((int)DateTime.Now.Ticks);  //Don't forget to seed your random, or else it won't really be random
        char[] chars = new char[8];
        //again, no need to pass this a variable if you always want 8

        for (int i = 0; i < 8; i++)
        {
            chars[i] = _allowedChars[randNum.Next(_allowedChars.Length)];
            //No need to over complicate this, passing an integer value to Random.Next will "Return a nonnegative random number less than the specified maximum."
        }
        return new string(chars);
    }


protected void Button1_Click(object sender, EventArgs e)
    {
        userid.Text = "Your id is:     " + id.Text;
        if(id .Text!="")
        {
            password.Text = "Your password is: " + CreateRandomPassword(); 
        }
    }

如果我已经明白你想要做什么,那么这应该会让你到那儿。

参考:MSDN Random.Next

答案 1 :(得分:3)

不应该是:

password.Text = CreateRandomPassword(int.Prase(myInt))

然而,你很奇怪:

  1. 获取用户ID并进行转换 它是字符串(我认为它是一个 数)
  2. 将该字符串解析回来 到一个数字
  3. 使用此号码作为 密码的长度
  4. 如果您的用户ID是345678,那么您创建的密码包含345,678个字符!请检查您的程序逻辑。

答案 2 :(得分:1)

asp.net

中查看密码生成器的以下链接

Password generator in ASP.NET

答案 3 :(得分:1)

如果使用Random作为局部变量(即使使用Ticks作为种子),根据多次调用函数的速度,密码看起来会相似。 解决方法是将其用作static变量,以确保结果真正随机。

private static Random rand = new Random();

另一个是使用.net内置解决方案,如Path.GetRandomFileName()  这会给你带来像

的结果
// w143kxnu.idj

仅使用前8个字符,并将一些字符任意更改为Upper()

答案 4 :(得分:0)

将Button_Click方法更改为以下内容将为您提供8个字符的随机密码:

static const int PASSWORD_LENGTH = 8;
protected void Button1_Click(object sender, EventArgs e)
{
    userid.Text = "Your id is:     " + id.Text;
    if(id .Text!="")
    {

        string myInt = id.Text.ToString(); 
        password.Text = "Your password is: " + CreateRandomPassword(PASSWORD_LENGTH); 
    }
   }

否则,如果id.Text包含任何字母,则会失败,这很可能是您遇到的错误。

答案 5 :(得分:0)

有2个问题。第一个id.Text.ToString()可能包含一些字符,使其无法解析为int。 “helo123”无法直接解析为int。这导致“输入格式错误”。只有在您确定ID仅包含数字时才应执行此操作。

其次,CreateRandomPassword(int.Parse(myInt))创建的密码与id的值一样长。您应该CreateRandomPassword(10)CreateRandomPassword(randNum.Next(5, 12))。如果您的ID为500,则您的密码长度为500个字符,如果您的字段应为32个字符,则可能会因“输入格式错误”而失败。

答案 6 :(得分:0)

首先我们从“0123456789”中取6(任意)随机数。

然后我们创建一个返回随机数的函数。

private string GetRandomNumber()
{
    var chars = "0123456789";
    var random = new Random();
    var result = new string(
        Enumerable.Repeat(chars, 6)
                  .Select(s => s[random.Next(s.Length)])
                  .ToArray());
    return result;
}

Visit Here查看完整示例。