116

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

4

6 回答 6

58

听起来您正在寻找BCrypt.net

BCrypt.net 是 OpenBSD 基于 Blowfish 的密码哈希代码的实现,Niels Provos 和 David Mazières 在“A Future-Adaptable Password Scheme”中进行了描述。它是 Damien Miller 对 jBCrypt 的直接移植,因此在相同的 BSD 风格许可下发布。该代码是完全托管的,应该可以与任何 little-endian CLI 实现一起使用——它已经过 Microsoft .NET 和 Mono 的测试。

于 2009-05-16T22:02:12.213 回答
25

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
于 2012-11-19T23:56:26.410 回答
23

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

于 2010-12-17T15:38:26.863 回答
6

在将某些东西从 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)。如果你愿意,你也可以在此基础上为自己制定一个计划。

于 2011-01-22T07:29:44.060 回答
0

错误答案,请看下文

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


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

于 2018-08-29T09:10:32.050 回答
-2

您是否尝试过这个MS BCryptCreateHash C++ 函数?似乎存在于 Windows Server 2008 和 Windows Vista 中。

此外,您也可以检查以下MS C# BCryptNative.cs类。

于 2015-08-26T20:04:03.800 回答