ホームページ > バックエンド開発 > C++ > PBKDF2 を使用してパスワードを安全にハッシュするにはどうすればよいですか?

PBKDF2 を使用してパスワードを安全にハッシュするにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-23 12:22:09
オリジナル
655 人が閲覧しました

How Can I Securely Hash Passwords Using PBKDF2?

パスワードの安全なハッシュ: 完全ガイド

パスワードを安全に保存することは、ユーザーのプライバシーとセキュリティを維持するために重要です。暗号化は簡単な解決策のように思えるかもしれませんが、この目的には理想的な方法ではありません。一方、ハッシュは、パスワードを安全に保存するために推奨される方法です。

段階的なパスワードハッシュプロセス

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

まず、暗号的に安全な擬似乱数生成器 (PRNG) を使用してランダム ソルト (一意の値) を作成します。

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

ステップ 2: パスワードをハッシュする

次に、PBKDF2 (パスワードベースのキー導出関数 2) アルゴリズムを初期化します。

<code class="language-c#">var pbkdf2 = new Rfc2898DeriveBytes(password, salt, 100000);
byte[] hash = pbkdf2.GetBytes(20);</code>
ログイン後にコピー
ログイン後にコピー

ステップ 3: ソルトとハッシュを組み合わせる

後で使用できるようにソルトとパスワード ハッシュ バイトを結合します:

<code class="language-c#">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-c#">string savedPasswordHash = Convert.ToBase64String(hashBytes);</code>
ログイン後にコピー

ステップ 5: パスワードを確認する

ユーザーが入力したパスワードを保存されたハッシュと照合して検証するには、保存されたハッシュを取得します:

<code class="language-c#">/* 获取存储的值 */
string savedPasswordHash = DBContext.GetUser(u => u.UserName == user).Password;</code>
ログイン後にコピー

バイトとソルトを抽出します:

<code class="language-c#">/* 提取字节 */
byte[] hashBytes = Convert.FromBase64String(savedPasswordHash);
/* 获取盐值 */
byte[] salt = new byte[16];
Array.Copy(hashBytes, 0, salt, 0, 16);</code>
ログイン後にコピー

ユーザーが入力したパスワードのハッシュ値を計算します:

<code class="language-c#">var pbkdf2 = new Rfc2898DeriveBytes(password, salt, 100000);
byte[] hash = pbkdf2.GetBytes(20);</code>
ログイン後にコピー
ログイン後にコピー

比較結果:

<code class="language-c#">/* 比较结果 */
for (int i=0; i < 20; i++)
    if (hashBytes[i+16] != hash[i])
        throw new UnauthorizedAccessException();</code>
ログイン後にコピー

これらの手順に従うことで、アプリケーションのパスワードを効率的かつ安全にハッシュ化できます。

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

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