.net实现的bcrypt

有谁知道bcrypt的一个很好的实现,我知道这个问题之前已经被问过,但得到的反应很less。 我有点不确定,只是select了一个在谷歌的实现,并认为我可能会更好在System.Security.Cryptography命名空间中使用sha256,至less我知道这是支持的! 你在想什么?

这听起来像你正在寻找BCrypt.net :

BCrypt.net是OpenBSD基于Blowfish的密码散列代码的实现,在Niels Provos和DavidMazières的“未来适应密码scheme”中有所描述。 它是由达米安·米勒(Damien Miller)提供的jBCrypt的直接端口,因此在相同的BSD格式许可下发布。 该代码是完全托pipe的,应该可以与任何小端的CLI实现一起使用 – 它已经使用Microsoft .NET和Mono进行了testing。

你可以在这里findBCrypt for .Net的更新实现: 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实现,所以我写了自己的。 从这个消息看来,我不是唯一一个需要这个的人,我已经决定在它上面放一个许可证,然后释放它。 url是:

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

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

我写的基于规范的BCrypt代码。 我还创build了一个PHP脚本,它生成长度为0到100的随机密码和salt,将它们encryption,并将它们输出到testing文件。 到目前为止,C#代码与这100%的时间相匹配。 欢迎您使用脚本并自己testing。

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

你有没有尝试过这个MS BCryptCreateHash C ++函数 ? 似乎来自Windows Server 2008和Windows Vista。

另外,你也许可以检查下面的MS C#BCryptNative.cs类。