使用簡單加密來儲存密碼是不夠的。 雜湊是一種單向加密函數,透過將密碼轉換為唯一的、不可逆的、固定長度的值,提供了更強大的解決方案。
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中文網其他相關文章!