有没有人知道bcrypt的良好实现,我知道之前已经问过这个问题,但它得到的响应非常少。我有点不确定只是选择在谷歌中出现的实现,并且我认为我最好在System.Security.Cryptography命名空间中使用sha256,至少我知道它是支持的!你有什么想法?
答案 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目前似乎是最受欢迎的图书馆
以下是如何将其用于散列密码的示例:
[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课程。