生成随机密码?

时间:2012-07-31 05:19:48

标签: c# asp.net .net

如何在ASP.net中生成固定长度的随机密码(无GUID)?生成随机密码后,我需要将密码通过电子邮件发送给指定的用户。

6 个答案:

答案 0 :(得分:8)

System.Web.Security命名空间中,您将找到一种生成密码的方法:

string pw = Membership.GeneratePassword(8, 1);

您可以在第一个参数中提供密码的长度。 第二个是指示生成的密码中的最小非字母数字字符数。

MSDN

答案 1 :(得分:3)

只需使用Membership.GeneratePassword Method

即可
// Generate a new 12-character password with 1 non-alphanumeric character.
  string password = Membership.GeneratePassword(12, 1);

然后使用以下链接作为参考,将您的密码作为MailMessage Body发送到电子邮件中。

Sending Mail Using C# via SMTP
Sending email in .NET through Gmail

来源: Configuring ASP.NET for sending Email

web.config的邮件设置

<system.net>
<mailSettings>
<smtp deliveryMethod="Network" from="from@yourdomain.com">
<network host="smtp server addresss" userName="username" password="password"
defaultCredentials="false" port="xxx" enableSsl="true"  />
</smtp>
</mailSettings>
</system.net>

然后使用以下代码加快邮件传递速度。你可以配置你的邮件使用gmail smtp服务器等,一切都取决于你。

    try
    {
    MailMessage mailMessage = new System.Net.Mail.MailMessage();
    mailMessage.To.Add(userEmailAddress);
    mailMessage.Subject = "Subject";
    mailMessage.Body = "your password should be in this section";
    var smtpClient = new SmtpClient();
    smtpClient.Send(mailMessage);
    return "Mail send successfully";
    }

catch (SmtpException ex)
{
return "Mail send failed:" + ex.Message;
}

如果您想创建自己的密码,谷歌会提供很多帮助 How To: Generate a Random Password (C#/VB.NET)
Generate Random password using C#
Generating Random Number and String in C#
C# Random Password Generator
Random Password Generation

希望得到这个帮助。

答案 2 :(得分:1)

我会使用本文档中提供的随机函数:http://msdn.microsoft.com/en-us/library/system.security.cryptography.rngcryptoserviceprovider.aspx

我通常创建一个字符数组或字符串(“abcdefg ...”。ToCharArray();)。这样选择的是什么,所以我们不会生成随机字符。

这不是一种罕见的功能,特别是对于具有单一管理员的小组(教师/学生情况)。我会说这种功能在单向加密密码的正常情况下是不受欢迎的。

答案 3 :(得分:0)

如果您不想使用Membership.GeneratePassword方法,这对您有用 生成随机数

 public int RandomNumber(int min, int max)
 {
        try
        {
            Random random = new Random();
            return random.Next(min, max);
        }
        catch (Exception)
        {

            throw;
        }

    }

生成随机字符串

 public string RandomString(int size, bool lowerCase)
 {
        StringBuilder builder = new StringBuilder();
        Random random = new Random();
        char ch;
        for (int i = 0; i < size; i++)
        {
            ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));
            builder.Append(ch);
        }
        if (lowerCase)
            return builder.ToString().ToLower();
        return builder.ToString();
 }

合并并获取唯一密码

 public string GetPassword()
 {
        StringBuilder builder = new StringBuilder();
        builder.Append(RandomString(4, true));
        builder.Append(RandomNumber(1000, 9999));
        builder.Append(RandomString(2, false));
        return builder.ToString();
 }

通过Gmail SMTP发送密码

  public void SendUsernamePassword(string Email,string UserName,string Password)
  {


        MailMessage mM = new MailMessage();
        mM.From = new MailAddress("YourGmailAccount@gmail.com");
        mM.To.Add(Email);
        mM.Subject = "Your Username and Password.";
        mM.Body = "Your Username and Password is:<br/>Username:" + UserName+ "<br/>" + "Password:" + Password;
        mM.IsBodyHtml = true;
        mM.Priority = MailPriority.High;
        SmtpClient sC = new SmtpClient("smtp.gmail.com");
        sC.Port = 587;
        sC.Credentials = new NetworkCredential("YourGmailAccount@gmail.com", "YourPassword");
        //sC.EnableSsl = true;
        sC.EnableSsl = true;
        sC.Send(mM);


  }

答案 4 :(得分:0)

您可以使用自己的规则创建自己的 PasswordGenerate 方法,

public String PasswordGenerate(int passwordSize,
 bool useUpper,
 bool useLower,
 bool useNumbers,
 bool useSpecialChars)
{
    string UPPER_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    string NUMBERS = "1234567890";
    string SPECIAL_CHARS = "!@#$%^&*()";

    Random random = new Random();
    char[] password = new char[passwordSize];
    string charSet = string.Empty;

    if(useUpper) charSet += UPPER_CHARS;
    if(useLower) charSet += UPPER_CHARS.ToLower();
    if(useNumber) charSet += NUMBERS;
    if(useSpecialChars) charSet += SPECIAL_CHARS;

    for(int i = 0; i < passwordSize; i++)
    {
         password[i] = charSet[random.Next(charSet.Length - 1)];
    }

    return string.Join(null, password);
}

Check this to make a password generator app

答案 5 :(得分:-2)

我建议不要通过电子邮件发送密码,因为相关的固有风险,以及这增加了您的应用程序的不必要的复杂性。最好直接在应用程序的最自然位置实施密码创建系统。我意识到&#34;最自然的地方&#34;的模糊性,但这是因为不同的应用程序有不同的设计理念。我也在这里使用&#34; application&#34;在广义上比通常使用的更广泛。在具有用户帐户的网站中创建密码的自然点的示例将是帐户管理,登录和注册页面。如果密码生成器的目的是提供用户将更改的临时密码,那么最好让用户在注册时确定其密码。如果您在彻底考虑了应用程序的需求后仍然需要密码生成器,那么您可以使用随机数生成器通过管道传输到所需的字符集。我还建议你至少在互联网上搜索有关问题主题的信息,然后才能在论坛上询问,特别是如果这是一个简单的问题,但即使不是,你也可能会在你最喜欢的搜索引擎的前几页。如果已经找到了一个容易找到问题的解决方案,那么你最好浪费时间友好的人帮助你,最坏的情况是得到不友好的答案,难以理解忙碌的人的答案,来自没有经验的用户或RTFM的粗制滥造。如果你没有找到一个粗略搜索你最喜欢的搜索引擎或教程网站的解决方案,并且在考虑了你的需求究竟是什么之后五分钟,那么请问。在做自己的研究之前询问会增加出现不体谅的风险。

作为我实际答案的摘要

  • 随机数生成器
  • 对期望的字符集进行类型转换。就这么简单。

(如果它比您的首选语言更复杂,可能会重新考虑您的首选语言:p)