ホームページ > バックエンド開発 > C++ > PBKDF2 を使用して .NET でパスワードを安全にハッシュする方法

PBKDF2 を使用して .NET でパスワードを安全にハッシュする方法

Barbara Streisand
リリース: 2025-01-23 12:32:12
オリジナル
759 人が閲覧しました

How to Securely Hash Passwords in .NET Using PBKDF2?

現在のベスト プラクティスを使用して、.NET でパスワードを安全にハッシュ化します

パスワードをデータベースに保存する場合、ハッシュ アルゴリズムを使用して機密情報を保護することが重要です。暗号化方式はこの目的には適していません。 .NET で最適なネイティブ パスワード ハッシュ アルゴリズムは、PBKDF2 (Password-Based Key Derivation Function 2) です。

PBKDF2 を使用したパスワードハッシュのステップバイステップガイド

ステップ 1: ソルト値を生成する

ソルトは、各パスワードのハッシュを一意にするために使用されるランダムな値です。暗号化 PRNG (擬似乱数ジェネレーター) を使用してソルト値を作成します:

<code class="language-csharp">byte[] salt;
new RNGCryptoServiceProvider().GetBytes(salt = new byte[16]);</code>
ログイン後にコピー

ステップ 2: PBKDF2 オブジェクトを作成し、ハッシュ値を計算します

Rfc2898DeriveBytes クラスをインスタンス化し、パスワード、ソルト、および必要な反復回数 (~100,000 を推奨) を指定します。

<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 文字列に変換する

データベースに保存するために、結合されたバイトを Base64 文字列にエンコードします:

<code class="language-csharp">string savedPasswordHash = Convert.ToBase64String(hashBytes);</code>
ログイン後にコピー

ステップ 5: ユーザーが入力したパスワードを確認します

ユーザーが入力したパスワードが保存されているハッシュと一致することを確認するには:

  • 保存されているパスワード ハッシュをデータベースから取得します。
  • 保存されているハッシュ値からソルトとハッシュ バイトを抽出します。
  • ユーザーが入力したパスワードと抽出されたソルトを使用して、新しいハッシュを計算します。
  • 計算されたハッシュと保存されているハッシュを比較します。一致する場合、パスワードは有効です。
<code class="language-csharp">string savedPasswordHash = DBContext.GetUser(u => u.UserName == user).Password;

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);

for (int i=0; i < 20; i++)
    if (hashBytes[i+16] != hash[i])
        throw new UnauthorizedAccessException();</code>
ログイン後にコピー

注: 反復回数は、アプリケーションのパフォーマンス要件に基づいて調整できます。一般に推奨される最小値は 10,000 です。

以上がPBKDF2 を使用して .NET でパスワードを安全にハッシュする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート