bcrypt的.net实现

时间:2009-05-16 21:56:49

标签: .net bcrypt bcrypt.net

有没有人知道bcrypt的良好实现,我知道之前已经问过这个问题,但它得到的响应非常少。我有点不确定只是选择在谷歌中出现的实现,并且我认为我最好在System.Security.Cryptography命名空间中使用sha256,至少我知道它是支持的!你有什么想法?

6 个答案:

答案 0 :(得分:53)

听起来你正在寻找BCrypt.net

  

BCrypt.net是一个实现   OpenBSD的基于Blowfish的密码   散列码,描述于“A   未来适应性密码方案“   Niels Provos和DavidMazières。它是   Damien的jBCrypt直接港口   米勒,因此被释放   相同的BSD式许可证。代码是   完全管理,应该与任何人合作   little-endian CLI实现 - 它   已经过Microsoft .NET测试   和单声道。

答案 1 :(得分:23)

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

答案 2 :(得分:22)

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

答案 3 :(得分:6)

当从PostgreSQL(有pg_crypto)移动到SQLite(没有)时,我需要一个BCrypt实现,所以我写了自己的。从这个消息看,我不是唯一需要这个消息的人,我决定在它上面打一个许可证并发布它。网址是:

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

它背后的Blowfish实现是Bruce Schneier公共领域C实现的一个端口,并且在所有官方测试向量上都取得了成功。

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

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

答案 4 :(得分:-1)

错误的答案,请参见下文

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


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

答案 5 :(得分:-2)

你有没有试过这个MS BCryptCreateHash C++ function?似乎存在于Windows Server 2008和Windows Vista中。

另外,您也许可以查看以下MS C# BCryptNative.cs课程。

相关问题