使用 BCrypt 技术将密码作为哈希存储到数据库中。尽管与 MD5、SHA-1 等快速散列算法相比它可能有点慢,但我们决定采用它,因为安全性更为重要。
在 .Net 中,我使用 http://bcrypt.codeplex.com/ 实现了
BCrypt.Net.BCrypt.HashPassword("Password", BCrypt.Net.BCrypt.GenerateSalt(12));
在我们的站点中,管理员将为新用户创建用户名和密码。
存储散列密码没有问题。但是如果管理员想更新密码,他需要查看旧密码。我没有看到任何解密存储在 Bcrypt.Net 数据库中的散列值的方法。
有什么方法可以从 Bcrypt 散列密码生成文本吗?不过我同意这不可能,但是我们在某些情况下会这样做:(
更新:我决定使用以纯文本形式存储在某个表中的默认密码,并对该文本进行散列处理并存储为用户密码。当用户登录到站点时,他将被迫更改密码,直到他重新设置。这听起来不错吗?
加密散列在设计上是一种单向函数。不可逆转正是哈希函数的意图。此外,多个输入可以散列为相同的输出。
需要访问旧密码才能设置新密码表明设计存在缺陷。确切地说,为什么您需要以明文形式访问旧密码才能更新密码?
我是一名优秀的程序员,十分优秀!