Mysqlデータベースなど、平文でパスワード保存してないですか?
ほら、パスワード忘れたのでって問合せすると、パスワードを教えてくれるサービスとか・・。
いや、パスワードがわかるってどういう事よ。
パスワードは暗号化されていればわかるはずないから再度設定しないとならないはずなんですよね。
不思議だね。そのまま保存してるんじゃないですか??
ということで、データベースに暗号化して保存しましょうね。
今回紹介するのは、md5を利用した方法です。
あと塩を少々。
データベースにパスワードを保存するにはこんな感じにしましょうか。
$password='パスワード'
$salt = uniqid();
$password = md5(md5($password) . $salt);
//以下DBに$passwordと$salt保存するコード
uniqid()で一意な ID を生成します。
それを利用しパスワードに塩(salt)を加えます。
md5($password) で暗号化し、さらに塩を加えてさらに暗号化。
データベースにはこの完成した$passwordと$saltを保存します。
照合するときは、パスワードをデータベース上でまたMD5にして一致したらデータを引っ張ってきます。
なおデータが保存されているフィールドは$passwordはpassword、$saltはsaltとします。
SELECT * FROM `user` WHERE `id` = 'ここにユーザーID' AND `password` = md5(CONCAT(md5('ここにパスワード'), salt));
これでデータベースにはパスワードがそのまま保存されていないことになります。
あと、データが漏れたとしても復元は難しいはずです。
データベースのフィールドのpasswordはvarchar(32)、saltはvarchar(13)で型を指定してあげるとちょうどいいです。
コメント