PHPの備忘録です。
データベースにパスワードを登録
データベースにユーザーリスト用のテーブルを作り、ユーザーIDやパスワードを登録することになります。
ここで、パスワードに関しては、そのままパスワードを平文(そのままの文字列)で登録してはセキュリティ上危険です。というのも、データベースをハッキングされると、パスワードが一目で分かることになるからです。
そこで、データベースにパスワードを登録する時は、パスワードを難読化した文字列に変更する必要があります。
パースワードをハッシュ化
上記のパスワードを難読化することをハッシュ化と言います。
ここで悩むのが、ハッシュの種類。
Googleでハッシュを調べていくと、SHA512、MD5、CRC32と色々なハッシュがあることがわかります。
最初に悩むのが、どれを使ってパスワードをハッシュ化すればいいかわからないということです。
答えを言うと、PHP関数のpassword_hashを使って、パスワードをハッシュ化します。
<? php
$hash= password_hash('1234', PASSWORD_DEFAULT);
echo $hash;
?>
下は、1234のパスワードの例です。password_hashで出力されたハッシュ化されたパスワード($2y….)をデータベースに登録して下さい。
パスワード | 暗号化したパスワード |
---|---|
1234 | $2y$10$lr4NcxpUJWo4Rbh5p4V.GOfuwu1d2zoNvWfu5XtpYQBP7KpoKn6Se |
password_hashを何度か繰り返すと気付かれると思いますが、出力される文字列は毎回異なります。でも大丈夫なので気にしないで下さい。
パスワードの確認
PHPでログイン画面を作成する時に、パスワードの確認作業を作る必要があります。
そこで使用するのが、password_verifyという関数です。
password_verify(フォームから入力されたパスワード, データベースから取得したハッシュ化したパスワード)
password_hash で作成されたパスワードであれば間違いなく、比較確認できます。
下記の関数を実行すれば、Trueになります。先述しましたが、password_hashでハッシュ化された文字列は毎回異なりますが、それでも、Trueになるので心配しないで下さい。
password_verify(1234, $2y$10$lr4NcxpUJWo4Rbh5p4V.GOfuwu1d2zoNvWfu5XtpYQBP7KpoKn6Se)
おわりに
手動でデータベースに登録することはありません。
通常はPHPを使ってデータベースにパスワードを登録してくことになるので、その過程で、password_hash を使うことになります。
PHPとデータベースの勉強の為に、テーブルを手動で追加する時には、上記のように、パスワードをハッシュ化させてから登録することになりますので、滅多に悩むことは無いと思います。
コメント