登録すると、独自のソルトが作成されます。そのソルトはハッシュの一部になりました。よく見ると、ハッシュの最初の部分に埋め込まれていることがわかります。パスワードを確認するには、以前にハッシュされたパスワードのソルトを使用して、同じソルトを再度使用します。
$correctPasswordHash = getPasswordFromDatabase($_POST['username']);
$hash = crypt($_POST['password'], $correctPasswordHash);
if ($correctPasswordHash === $hash) ...
これをより簡単で確実なものにするには、password_compatライブラリ
を使用します。 、これを使いやすいAPIでラップします。これは、将来のバージョンのPHPにも統合されます。 crypt
の正しい使用法についてソースコードを調べます 、あなたが世話をする必要があるいくつかの落とし穴があるので。 password_compatライブラリも、単純な===
の代わりにカスタムバイナリ比較を使用しています タイミング攻撃を阻止します。