.net实现的bcrypt


116

有谁知道bcrypt的良好实现,我知道这个问题之前曾有人提出过,但反应很少。我不确定只是选择一个在google中出现的实现,并认为我最好在System.Security.Cryptography命名空间中使用sha256,至少那时我知道它受支持!你有什么想法

Answers:


58

听起来您正在寻找BCrypt.net

BCrypt.net是OpenBSD基于Blowfish的密码哈希码的实现,在Niels Provos和DavidMazières的“未来适应密码方案”中进行了描述。它是Damien Miller的jBCrypt的直接端口,因此以相同的BSD样式许可发布。该代码是完全托管的,并且可以与任何低端CLI实施一起使用-已通过Microsoft .NET和Mono进行了测试。


是的,那也是我在Google上找到的那个。您使用它,还是知道它是否被广泛使用?
加雷斯

2
我考虑使用BCrypt的原因是因为这篇文章matasano.com/log/958/…,它声称BCrypt是必经之路。
加雷斯

13
只是想补充一点,如果您在Windows Server 2008上使用BCrypt.net,则需要为其命名而不是BCrypt.dll,否则它将与Vista中调用“ bcrypt”函数的新Windows API冲突。 dll”,因此,如果您在Web应用程序bin /目录中将Bcrypt.net作为Bcrypt.dll使用,则Windows将无法找到正确的dll,并且您会收到一些神秘的错误。
thelsdj

5
注意:以下为什么要使用bCrypt的原因(对于那些感兴趣的人)。codahale.com/how-to-safely-store-a-password
泰晤士


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


6

将某些东西从PostgreSQL(具有pg_crypto)移到SQLite(没有)时,我需要BCrypt实现,所以我写了自己的东西。看到此消息后,我不是唯一需要此消息的人,因此决定对它拍一个许可证并释放它。网址是:

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

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

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

该库还包括PBKDF2代码,该代码可用于任何HMAC,而不是.Net的SHA-1实施(今天添加了-我打算尽快用C#进行SCrypt,并且需要具有HMAC-SHA256的PBKDF2)。如果需要,您也可以基于此制定一个方案。


0

答案错误,请参阅下文

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


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


1
在这种情况下,BCrypt是指Microsoft PR名称BestCrypt。有关更多详细信息,请参见stackoverflow.com/questions/9711568/…
RobbyD

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.