【PHP】データベースにパスワードを登録する時のハッシュ化

プログラム

PHPの備忘録です。

データベースにパスワードを登録

データベースにユーザーリスト用のテーブルを作り、ユーザーIDやパスワードを登録することになります。

ここで、パスワードに関しては、そのままパスワードを平文(そのままの文字列)で登録してはセキュリティ上危険です。というのも、データベースをハッキングされると、パスワードが一目で分かることになるからです。

そこで、データベースにパスワードを登録する時は、パスワードを難読化した文字列に変更する必要があります。

パースワードをハッシュ化

上記のパスワードを難読化することをハッシュ化と言います。

ここで悩むのが、ハッシュの種類

Googleでハッシュを調べていくと、SHA512MD5CRC32と色々なハッシュがあることがわかります。

最初に悩むのが、どれを使ってパスワードをハッシュ化すればいいかわからないということです。

答えを言うと、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とデータベースの勉強の為に、テーブルを手動で追加する時には、上記のように、パスワードをハッシュ化させてから登録することになりますので、滅多に悩むことは無いと思います。

 

プログラム
スポンサーリンク
シェアする
フォローする

コメント

タイトルとURLをコピーしました