我查阅了msdn和其他资源,了解如何做到这一点,但我没有提出明确的解决方案。这是我找到的最好的http://blogs.msdn.com/b/shawnfa/archive/2004/04/14/generating-a-key-from-a-password.aspx?Redirected=true
我想在C#中使用bcrypt或PBKDF2 (似乎与bcrypt相关)对密码进行哈希处理。我喜欢试验我的计算机需要多少轮次来散列一个密码。然而,似乎所有的事情都是关于加密的,而每个人都在谈论哈希。我想不出来。如何对密码进行哈希处理?它看起来更像PBKDF2 (Rfc2898?)是一个随机数生成器,我使用GetBytes(数量)来选择我的散列大小。
我很困惑。如何使用bcrypt/PBKDF对密码进行哈希处理?
发布于 2012-07-10 20:28:07
PBKDF2
你们真的很亲近。您给出的链接向您展示了如何调用Rfc2898DeriveBytes函数来获得PBKDF2散列结果。但是,这个示例使用派生密钥进行加密( PBKDF1和2最初的动机是创建适合用作加密密钥的“密钥”派生函数),这让您大吃一惊。当然,我们不希望将输出用于加密,而是将其本身用作散列。
如果需要PBKDF2,可以尝试为此目的编写的SimpleCrypto.Net库。如果你使用look at the implementation,你可以看到它实际上只是(你猜对了) Rfc2898DeriveBytes的一个薄薄的包装器。
BCrypt
如果您想尝试这个变体,可以尝试名为(还有什么) BCrypt.NET的C#实现。
免责声明:我没有使用或测试过我链接到的任何库...YMMV
发布于 2019-07-09 17:37:46
首先,我敦促大家使用平台本身包含的经过加密验证的参考算法。
不要使用第三方软件包和未经验证的开放源码软件组件、或任何其他你刚刚从互联网上复制粘贴的代码。
对于.NET ,请使用PBKDF2和,而不是bCrypt,因为没有针对.NET的bCrypt认证实施
我不是不尊重任何高尚的开源开发者(我自己也是),但你永远不能确定他们的网站在10年内不会被黑客入侵,最终你会从Nuget/npm或其他包管理器那里得到一个恶意软件包。
有关验证的更多信息,请访问this SO answer
现在,回到PBKDF2,下面是简单的代码
public static byte[] PBKDF2Hash(string input, byte[] salt)
{
// Generate the hash
Rfc2898DeriveBytes pbkdf2 = new Rfc2898DeriveBytes(input, salt, iterations: 5000);
return pbkdf2.GetBytes(20); //20 bytes length is 160 bits
}
如果您需要散列的字符串表示(而不是字节数组)-您可以使用这个答案http://stackoverflow.com/a/624379/714733中的超快转换类
发布于 2016-09-20 22:03:03
我花了forever (几天时间)到find what to actually code才让哈希密码生效!!所以我把它放在这里是为了方便。
您确实需要阅读documentation和theory1 theory2,然后您可能会遇到一些安全漏洞。安全是一个非常重要的话题!买家要当心了!
将NuGet包BCrypt.Net添加到解决方案中
const int WorkFactor = 14;
var HashedPassword = BCrypt.Net.BCrypt.HashPassword(Password, WorkFactor);
您应该将WorkFactor调整为适当的值,请参见discussions。它是一个log2 function
该数字为log2,因此每次计算机速度翻倍时,默认数字加1。
然后,将散列密码作为passwordFromLocalDB
存储在数据库中,并测试传入的password
,如下所示:
if (BCrypt.Net.BCrypt.Verify(password, passwordFromLocalDB) == true)
祝好运!
https://stackoverflow.com/questions/11412882
复制相似问题