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