BCrypt算法:从数据库返回散列密码进行比较好吗?
本文关键字:比较 密码 算法 数据库 返回 BCrypt | 更新日期: 2023-09-27 18:13:35
我在ASP中使用BCrypt算法。. NET MVC项目如下所述:
http://www.codeproject.com/Articles/475262/UseplusBCryptplustoplusHashplusYourplusPasswords由于我使用N层架构,需要在数据访问层创建从数据库返回哈希密码的方法。在这一点上,我很不舒服。
从数据库返回哈希密码是好的吗?我想从数据库端进行检查,但要检查密码,我需要调用以下方法为此,我需要散列密码:
BCrypt。CheckPassword(我的密码,myHash);
还有别的方法吗?实现它的最佳方式是什么?
是的,从数据库中提取散列值是可以的,事实上,除非您要在数据库中实现自定义函数,否则这是必需的。只是不要在客户端检查密码,要在服务器端检查。
bcrypt盐/哈希值不是一个秘密 1 -其想法是,即使这是"暴露"的,它将是不可逆转的。在HMAC中可能有一个附加的密钥,例如:
在许多应用程序中,习惯上将身份验证/哈希验证检查保留到相关的应用程序/服务层中-如图所示-但它也可以在数据库中完成(例如,根据情况使用sproc)。但只需使用提供的示例代码;
服务中必须有信任,它说,"是的,这是一个代表哈希值的有效密码短语"。给它提供一个已知的/被破坏的哈希值可能会导致它撒谎——但在这一点上,整个系统都被破坏了,这与数据库作为一个外部提供者说"我信任这个用户"没有什么不同。
1虽然正确的密码散列不是秘密,并且它通过防止被反转来提供安全性,但散列通常应该保密。通常,只有使用哈希进行身份验证的服务才需要访问哈希,并且应该只通过已知密钥访问哈希。