创建新密码的最佳方法是啥?

Posted

技术标签:

【中文标题】创建新密码的最佳方法是啥?【英文标题】:what is the best way to create new password?创建新密码的最佳方法是什么? 【发布时间】:2012-08-15 15:32:09 【问题描述】:

我已经构建了 mvc 3 应用程序,我尝试构建忘记密码功能。过程如下。

首先会提示用户输入用户名

如果用户名存在,则会显示安全问题

如果用户输入正确答案,新创建的密码将为 发送到发送时保存在数据库中的电子邮件 注册

这里我已经完成了第二步,也完成了检查答案。我想知道的是创建将发送到电子邮件的新密码的最佳方法是什么。我搜索了创建随机字符串并找到了这个..

var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
var random = new Random();
var result = new string(
    Enumerable.Repeat(chars, 8)
              .Select(s => s[random.Next(s.Length)])
              .ToArray());

我认为但不确定是否有机会再次创建相同的随机字符串,因此可能不适合新密码。生成新密码的最佳方法是什么。任何帮助将不胜感激。谢谢!

【问题讨论】:

Troy Hunt 写了一篇关于密码重置的博文:Everything you ever wanted to know about building a secure password reset feature 你的意思是这是一个临时密码,他必须在第一次登录时更改它? 是的,这可能是临时密码,用户在使用新密码登录后具有更改密码功能 请不要发送密码,只需通过电子邮件发送重置链接。 @KirkBroadhurst - 请阅读 Oded 链接到的文章。它包含对此的讨论。 【参考方案1】:

除了@Odded提供的链接:会说考虑到最好使用 SecureString 在内存中保存密码字符串时的类。

表示应保密的文本。文字是 使用时为隐私加密,并从计算机中删除 不再需要时的内存。这个类不能被继承。

因为一些恶意软件可以在认证的时候转储你的进程内存,如果是简单的stringclear字符串将被黑客访问。

【讨论】:

【参考方案2】:

我会使用 Guid.New()。不过据说最好发链接设置新密码

【讨论】:

【参考方案3】:

使用Membership.GeneratePassword 方法。您可以找到文档here。这是一种更安全的机制,因为他们将在幕后使用密码术,并且您具有一些很好的灵活性,因为它允许您确定要包含的字母数字字符的长度和数量。它会生成一些strong密码,我用过。

【讨论】:

【参考方案4】:

忘记密码使用这个:

string username = member.LogName;
                    MembershipUser user = Membership.GetUser(username);
                    string generatedPassword = user.ResetPassword();
                    mail(generatedPassword ); // create custom function to mail the new 

生成的密码。

【讨论】:

以上是关于创建新密码的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

忘记密码过程的最佳做法是啥?

通过覆盖旧密码插入新密码

创建链接以重置密码的最佳做法是啥? [关闭]

使用 firebase 创建简单身份验证的最佳方法是啥?

如何为特定用户实施旧密码和新密码?

PIN 码的“达到最大尝试次数”的最佳 HTTP 状态码是啥?