DAY 52 WEBサービス部 PHP自主練 ハッシュ化について

DAY 52 WEBサービス部&PHP自主練 パスワードのハッシュ化 【ウェブカツ】

PHP DAY 52 WEBサービス部 PHP自主練 ハッシュ化について

PHP自主練 / 1hour

WEBサービス部 Lesson9~11 / 1hour

 

Sep / 29.5hour

Total / 131hour

WEBサービス部の自主練用教材

 

ハッシュ化と暗号化って何が違うの?

ログイン機能などを実装する際に必要となる「パスワード」。

ユーザーに入力してもらったパスワードを、加工せず生のまま$_POSTでやり取りすると大問題。

そこでパスワードを「ハッシュ化」することで、解読できないようにする、という流れが一般的になってるようです。

 

・・・が、「暗号化」というのもありますね。何が違うのでしょうか?

 

暗号化

「暗号化」とは元となるデータに対して、特別な処理を行うことで、別のデータに変換する処理のことをいいます。
それに対し、暗号化されたデータを元のデータに戻す処理のことを「復号化」と言います。
また、暗号化や復号化の処理には暗号アルゴリズムに応じた「鍵」が必要になります。

ハッシュ化

「ハッシュ化」とは、「元々あるデータ」をアルゴリズムに従って、固定長のランダムに見える値に「不可逆変換」すること。つまり、暗号化と違って「復元化」ということが不可能。
”ハッシュ”という英語の意味通り、情報を細切れ・ぐちゃぐちゃにすることで元に戻すことができないようにしている。

 

というように、暗号化は復元可能でハッシュ化は復元不可能な加工を、情報に施す、という感じです。

 

PHPでハッシュ化をするにはどうするの?

今までのことを見ると、「アルゴリズム?不可逆変換?」という感じでとてつもなく難しいプログラミングを組む必要がありそうですが、次のコードを記述するだけでじつはハッシュ化は実装できます。

 

password_hash(第一引数, 第二引数)

第一引数=暗号化したい文字列を指定。多くはユーザーが入力したパスワードが入るので$_POST[‘pass’]みたいな形が多い。

第二引数=ハッシュするためのアルゴリズムを指定。基本的にPASSWORD_DEFAULTを指定しておけばOK。

 

ハッシュ化したものがパスワードとマッチするかどうかを確かめるには

password_verify(第一引数(=ユーザーが入力したパスワード), 第二引数(=ハッシュ化したパスワードの値))

とすることで確認することができます。

 

参考

https://www.php.net/manual/ja/function.password-hash.php

https://qiita.com/bayasist/items/da4be3a90a97b8cf38fe

https://qiita.com/rana_kualu/items/3ef57485be1103362f56

https://qiita.com/MasaKuuuu/items/51552aa0331f3ae90dae

 

学習は全てウェブカツ!!というプログラミングスクールで学んでいます。

プログラミングスクール「ウェブカツ!!」

大手スクール生徒や現役エンジニアが多数学び直している「実務レベル」に特化した「稼ぐ」ためのプログラミングスクール[…]

DAY 52 WEBサービス部 PHP自主練 ハッシュ化について
最新情報をチェックしよう!