ソルトは、ハッシュする前にパスワードと結合されます。パスワードとソルト クリアの値が連結され、結果の文字列がハッシュされます。これにより、2 人のユーザーが同じパスワードを持っていたとしても、異なる結果のハッシュが得られることが保証されます。(また、レインボー テーブルを使用した辞書攻撃として知られる攻撃をより困難にします)。
その後、ソルトはハッシュ結果とともに元の/クリア形式で保存されます。その後、パスワードを確認したい場合は、元のプロセスをもう一度実行します。レコードのソルトとユーザーが提供したパスワードを組み合わせ、結果をハッシュし、ハッシュを比較します。
あなたはおそらくすでにこれを知っています。しかし、覚えておくことが重要です。ソルトは毎回ランダムに生成する必要があります。保護されたハッシュごとに異なる必要があります。多くの場合、RNG はソルトの生成に使用されます。
たとえば、
user-password: "mypassword"
random salt: "abcdefg12345" results
-cleartext: "mypassword:abcdefg12345" (どのように組み合わせるかはあなた次第です。毎回同じ組み合わせ形式を使用する限り) .
結果のクリアテキストをハッシュします: "somestandardlengthhashbasedonalgorithm"
データベースに、使用したハッシュとソルトを保存します。私はそれを2つの方法で見ました:
方法 1:
field1 - salt = "abcdefg12345"
field2 - password_hash = "somestandardlengthhashbasedonalgorithm"
方法 2:
field1 - password_hash = "abcdefg12345:somestandardlengthhashbasedonalgorithm"
どちらの場合でも、ソルトとパスワードのハッシュをデータベースからロードし、比較のためにハッシュをやり直す必要があります