2

使用 BCrypt 技术将密码作为哈希值存储到数据库中。尽管与 MD5、SHA-1 等快速散列算法相比,它可能有点慢,但我们决定采用,因为安全性更重要。

在 .Net 中,我使用http://bcrypt.codeplex.com/实现了

BCrypt.Net.BCrypt.HashPassword("Password", BCrypt.Net.BCrypt.GenerateSalt(12));

在我们的站点中,管理员将为新用户创建用户名和密码。

存储散列密码没有问题。但如果管理员想更新密码,他需要查看旧密码。我没有看到任何方法可以对存储在 Bcrypt.Net 中的 DB 中的散列值进行解密。

有没有办法从 Bcrypt 散列密码生成文本?但是我同意这应该是不可能的,但是我们有一些场景可以做到这一点:(

更新:我决定使用存储在某个表中的默认密码作为纯文本并将该文本散列并存储为用户的密码。当用户登录网站时,他将被迫更改密码,直到他重置。这听起来不错吗?

4

1 回答 1

15

按照设计,加密散列是一种单向函数。正是哈希函数的意图是无法逆转。此外,多个输入可以散列到相同的输出。

要求访问旧密码才能设置新密码表明设计存在缺陷。为什么,确切地说,您需要以明文形式访问旧密码才能更新密码?

于 2013-03-23T05:58:26.280 回答