くりゅぴ!

サーバーやWEB問題解決のメモから生活お得情報まで。未分類のものは執筆中

MysqlDBで暗号化してパスワードを保存する

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)で型を指定してあげるとちょうどいいです。

WEB開発

タグ: ,

WEB開発の最新記事

2020年7月13日
印刷時改ページをする
2020年7月10日
PHPのJsを外部ドメインより呼び出す
2020年7月10日
ブラウザにキャッシュさせない

コメントを残す

メールアドレスが公開されることはありません。