何千人ものユーザーがいて、パスワードを非常に安全にしたいとします。今、私はそれmd5()
を使用するのが最も安全ではないことを学びました、しかし私が安全であるためにできると思うことはそれを塩漬けにすることです(これは新しいことではないことを私は知っています)。そのため、このために2つのテーブルを作成することを考えていました。1つaccounts
はアカウントに関連付けられたすべての情報を持つと呼ばれsalt
、2つ目のテーブルは次のように呼ばれauth
、フィールドがあります。account_id, password
まず、登録時にソルトを作成します(ランダムに生成されます)
$salt = "#52/sBsO8";
次に、提供されたすべての情報はaccounts
、それらの1つであるsaltに送られます
次に、データベースに情報を正常に配置した後、auth
テーブルに保存されるパスワードを作成します。この方法では、パスワードはユーザーが入力するパスワードのmd5ではなく、ソルトのmd5であり、ユーザーが入力するパスワードです。
したがって、のパスワードauth
は
$password = md5($user_entered_password . $salt);
テスト文字列:PHPコード
$password = "123";
$salt = "#52/sBsO8";
echo md5($password) ." / ";
echo md5($password . $salt);
出力:202cb962ac59075b964b07152d234b70 / dfbf0b257c5182af0ae893c2680f4594
問題は、これはパスワードを処理するための非常に安全な方法ですか?Webサイトをmd5()
復号化するため、パスワードを推測する方法はたくさんあります。また、復号化するWebサイトは実際には復号化せずmd5()
、数百万の文字列のmd5ハッシュを持っているだけです。