単純な暗号化を使用してパスワードを保存するだけでは不十分です。 一方向の暗号化機能であるハッシュは、パスワードを一意で元に戻せない固定長の値に変換することで、より強力なソリューションを提供します。
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>
ステップ 4: ストレージ用の 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 中国語 Web サイトの他の関連記事を参照してください。