如何在 ASP.net(无 GUID)中生成固定长度的随机密码?生成随机密码后,我需要将密码通过电子邮件发送给指定用户。
6 回答
在System.Web.Security
命名空间中,您会找到一种生成密码的方法:
string pw = Membership.GeneratePassword(8, 1);
您可以在第一个参数中提供密码的长度。第二个是指示生成的密码中非字母数字字符的最小数量。
只需使用Membership.GeneratePassword 方法
// Generate a new 12-character password with 1 non-alphanumeric character.
string password = Membership.GeneratePassword(12, 1);
然后使用以下链接作为参考,将您的密码作为 MailMessage 正文发送到电子邮件中。
通过 SMTP 使用 C#
发送邮件 通过 Gmail 在 .NET 中发送电子邮件
来源: 配置 ASP.NET 以发送 电子邮件
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;
}
如果您想创建自己的密码,google 上有很多关于此的帮助。
如何:生成随机密码 (C#/VB.NET)
使用 C# 生成随机密码
在 C# 中生成随机数和字符串
C# 随机密码生成器
随机密码生成
希望这有帮助。
我会使用本文档中提供的随机函数:http: //msdn.microsoft.com/en-us/library/system.security.cryptography.rngcryptoserviceprovider.aspx
我通常创建一个字符数组或字符串(“abcdefg...”.ToCharArray();)。这种方式就是选择的,所以我们不会生成随机字符。
这不是一个不常见的功能,尤其是对于只有一个管理员的小组(教师/学生情况)。我会说这个功能在单向加密密码的正常情况下是不可取的。
如果您不想使用 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);
}
您可以使用自己的规则创建自己的 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);
}
我建议不要通过电子邮件发送密码,因为相关的固有风险以及这给您的应用程序增加了不必要的复杂性。最好直接在应用程序最自然的位置实现密码创建系统。我意识到“最自然点”的模糊性,但这是因为不同的应用程序有不同的设计理念。同样在这里,我在比通常使用的更广泛的意义上使用“应用程序”。在具有用户帐户的网站中创建密码的自然位置的示例是帐户管理、登录和注册页面。如果密码生成器的目的是提供用户将更改的临时密码,那么最好让用户在注册时决定他们的密码。如果在彻底考虑了应用程序的需求之后您仍然需要密码生成器,那么您可以使用通过管道传输到所需字符集的转换器的随机数生成器。我还敦促您在论坛上提问之前至少在互联网上搜索有关问题主题的信息,特别是如果这是一个简单的问题,但即使不是,您也可能会在您最喜欢的搜索引擎的前几页。如果你的问题已经有一个容易找到的解决方案,那么充其量你会浪费帮助你的友好人士的时间,最坏的情况是得到不友好的答案、忙碌的人难以理解的答案、粗制滥造的帮助来自没有经验的用户或 RTFM。如果您还没有通过粗略搜索您最喜欢的搜索引擎或教程网站找到解决方案,并且在考虑了五分钟后,请务必询问您的具体需求。在进行自己的研究之前询问会增加显得轻率的风险。
作为我实际答案的总结
- 随机数发生器
- 类型转换为所需的字符集。就这么简单。
(如果它比您的首选语言更复杂,也许重新考虑您的首选语言:p)