使用简单加密来存储密码是不够的。 哈希是一种单向加密函数,通过将密码转换为唯一的、不可逆的、固定长度的值,提供了更强大的解决方案。
2012 年,PBKDF2(基于密码的密钥派生函数 2)成为 .NET 应用程序的推荐算法。 Rfc2898DeriveBytes
类通过以下关键步骤促进了安全哈希过程:
第 1 步:盐生成
<code class="language-csharp">byte[] salt = new byte[16]; new RNGCryptoServiceProvider().GetBytes(salt);</code>
第 2 步:创建哈希
<code class="language-csharp">var pbkdf2 = new Rfc2898DeriveBytes(password, salt, 100000); byte[] hash = pbkdf2.GetBytes(20);</code>
第 3 步:连接盐和哈希
<code class="language-csharp">byte[] hashBytes = new byte[36]; Array.Copy(salt, 0, hashBytes, 0, 16); Array.Copy(hash, 0, hashBytes, 16, 20);</code>
第四步:Base64编码存储
<code class="language-csharp">string savedPasswordHash = Convert.ToBase64String(hashBytes);</code>
第 5 步:密码验证
<code class="language-csharp">byte[] hashBytes = Convert.FromBase64String(savedPasswordHash); byte[] salt = new byte[16]; Array.Copy(hashBytes, 0, salt, 0, 16); var pbkdf2 = new Rfc2898DeriveBytes(password, salt, 100000); byte[] hash = pbkdf2.GetBytes(20); // Compare hash values here...</code>
PBKDF2 中的迭代次数(在这些示例中为 100000)控制着破解的计算成本。虽然 10000 是建议的最小值,但请根据应用程序的性能需求调整此值。 更高的迭代次数可以提高安全性,但可能会影响应用程序速度。
以上是PBKDF2 如何保护 .NET 中的密码存储(2012)?的详细内容。更多信息请关注PHP中文网其他相关文章!