bcrypt的.net实现

Gar*_*eth 114 .net bcrypt bcrypt.net

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

ine*_*ine 55

听起来你在寻找BCrypt.net:

BCrypt.net是OpenBSD基于Blowfish的密码散列码的实现,在Niels Provos和DavidMazières的"A Future-Adaptable Password Scheme"中有所描述.它是Damien Miller的jBCrypt的直接端口,因此在相同的BSD风格许可下发布.代码是完全托管的,应该适用于任何little-endian CLI实现 - 它已经过Microsoft .NET和Mono的测试.

  • 只是想添加一个注释,如果您在Windows Server 2008上使用BCrypt.net,则需要将其命名为BCrypt.dll之外的其他内容,否则它将与Vista中调用'bcrypt中的函数的新Windows API冲突. dll',所以如果你的Bcrypt.net在你的网络应用程序bin /目录中有Bcrypt.dll,Windows将无法找到正确的dll,你会得到一些神秘的错误. (13认同)
  • 注意:以下原因为什么要使用bCrypt(对于那些感兴趣的人).http://codahale.com/how-to-safely-store-a-password/ (5认同)
  • 我考虑使用BCrypt的原因是因为这篇文章http://www.matasano.com/log/958/enough-with-the-rainbow-tables-what-you-need-to-know-about-secure-密码方案/它声称BCrypt是要走的路. (2认同)

Rya*_*rle 24

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


Mak*_*nko 23

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));
    }
Run Code Online (Sandbox Code Playgroud)

样本输出:

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
Run Code Online (Sandbox Code Playgroud)


Jam*_*mes 6

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

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).如果你愿意的话,你也可以根据这个做出自己的计划.