有谁知道 bcrypt 的良好实现吗?我知道这个问题之前已经被问过,但得到的回应很少。我有点不确定是否要选择谷歌中出现的实现,并且我认为在 System.Security.Cryptography 命名空间中使用 sha256 可能会更好,至少我知道它是受支持的!你有什么想法?

有帮助吗?

解决方案

听起来您正在寻找 BCrypt.net:

BCrypt.net 是 OpenBSD 基于 Blowfish 的密码 哈希代码,如“A 面向未来的密码方案“ by 尼尔斯·普罗沃斯(Niels Provos)和大卫·马齐埃(David Mazières)。是的 Damien 的 jBCrypt 的直接端口 米勒,因此在 相同的 BSD 样式许可证。代码是 完全托管,应该与任何 little-endian CLI 实现 -- it 已通过 Microsoft .NET 的测试 和单声道。

其他提示

您可以在此处找到 .Net 的 BCrypt 的更新实现:http://bcrypt.codeplex.com/

BCrypt.Net 似乎是目前最受欢迎的库

http://bcrypt.codeplex.com/

以下是如何使用它来哈希密码的示例:

[TestMethod]
    public void BCryptTest()
    {
        const string password = "PASSWORD";
        const int workFactor = 13;

        var start = DateTime.UtcNow;
        var hashed = BCrypt.Net.BCrypt.HashPassword(password, workFactor);
        var end = DateTime.UtcNow;

        Console.WriteLine("hash length is {0} chars", hashed.Length);
        Console.WriteLine("Processing time is {0} with workFactor {1}", end - start, workFactor);
        Console.WriteLine("Hashed password: {0} ", hashed);
        Console.WriteLine("correct password {0}", BCrypt.Net.BCrypt.Verify("PASSWORD", hashed));
        Console.WriteLine("incorrect password {0}", BCrypt.Net.BCrypt.Verify("PASSWORd", hashed));
    }

示例输出:

hash length is 60 chars
Processing time is 00:00:01.0020000 with workFactor 13
Hashed password: $2a$13$iBqdG7ENBABEargiyzGlTexPsmviF/qrFxUZB2zce7HKF6MoBNhEq 
correct password True
incorrect password False

当我将某些内容从 PostgreSQL(有 pg_crypto)移动到 SQLite(没有)时,我需要一个 BCrypt 实现,所以我编写了自己的实现。从这条消息中看出,我不是唯一需要这个的人,我决定为其添加许可证并发布它。网址是:

http://zer7.com/software.php?page=cryptsharp

其背后的 Blowfish 实现是 Bruce Schneier 的公共域 C 实现的移植,并在所有官方测试向量上取得了成功。

我根据规范自己编写的 BCrypt 代码。我还创建了一个 PHP 脚本,它生成长度为 0 到 100 的随机密码和盐,对它们进行加密,然后将它们输出到测试文件。到目前为止,C# 代码 100% 匹配这些内容。欢迎您使用该脚本并自行测试。

该库还包括适用于任何 HMAC 的 PBKDF2 代码,而不是 .Net 的仅 SHA-1 实现(今天添加 - 我打算很快用 C# 进行 SCrypt,这需要带有 HMAC-SHA256 的 PBKDF2)。如果您愿意,您也可以基于此为自己制定一个计划。

错误答案请看下面

.Net Framework 中的所有“Cng”(下一代加密)后缀算法现在都使用 bcrypt。例如。 SHA256Cng.


实际上,MS BCrypt (BestCrypt) 并不是指基于 Blowfish 密码的密码 - 谢谢 RobbyD 的评论。
不会删除答案,以防其他人犯同样的困惑。

你试过这个吗 MS BCryptCreateHash C++ 函数 也许??似乎从 Windows Server 2008 和 Windows Vista 开始就存在。

另外,您可能可以检查以下内容 MS C# BCryptNative.cs 也许也有类。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top