2

我在这里尝试一个非常简单的任务。我有一个正在运行的服务器,它上面运行着一个 MySQL 实例,我的 rails 应用程序使用它来填充。对我来说不幸的是,我用设计来完成我所有的用户管理,现在有点卡住了。

所以我有一个正在编写的 C# 应用程序。我想通过我已经存在的 MySQL 数据库简单地验证用户和密码。

现在这是我所知道的(或认为我知道的):

Devise 使用 Bycrypt 对其密码进行单向加密,然后将其存储在数据库中。问题是我不确定如何正确实施 bycrypt 以生成正确的加密密码进行验证。

这是我当前生成哈希密码的过程:

string pass = password.Text;
string mySalt = BCrypt.Net.BCrypt.GenerateSalt();
string myHash = BCrypt.Net.BCrypt.HashPassword(pass, mySalt);

我认为这一定是错误的。我只是不太清楚我在这里缺少什么或我做错了什么。我会继续谷歌搜索,如果我想出答案,我会回复。此外,如果我违反了任何编辑规则或其他任何事情,请告诉我,以便我可以快速修复它们。

在此先感谢您的时间 :)

4

2 回答 2

2

我认为您的问题是每次您对密码进行哈希处理以验证数据库时都会生成 Salt。您需要使用最初生成密码时使用的相同 Salt 值。

于 2013-02-10T20:40:15.970 回答
2

好吧,所以我的问题实际上很愚蠢,但是对于与我具有相同逻辑谬误的其他人,我将进行解释。

默认情况下,Devise 使用 BCrypt 进行加密,这通常使用 Blowfish 完成,当他们这样做时,他们总是使用 BCrypts 生成盐函数,该函数为密码的每个散列生成随机盐。

由于随机盐,BCrypt 包含一个名为 Verify(password, hashed_pa​​ss) 的实用函数。此功能允许对未加密密码和散列通行证的测试进行比较。漂亮而且非常有用

于 2013-02-10T22:42:05.490 回答