phpでパスワードを暗号化する場合使用すべきなのは、password_hash()
- password_hash()
強固な一方通行ハッシュアルゴリズムを用いて、新しいhashを生成する。
crypt()と互換性があってcrypt()が作ったhashはpassword_hash()でも使用可能らしい。
password_hash()はcrypt()のシンプルなラッパーであり、既存のパスワードハッシュと互換性があります。
password_hash() は、ソルトを指定しなかった場合にはランダムなソルトを作りますので
一般に、これがいちばんお手軽で安全なアプローチです。
および PHP 7.0.0 以降でソルト・オプションは非推奨になりました。
らしい。
ここでは、password_hash()を使用することを推奨する。
- crypt() 文字列のhashを作成 salt(ソルト)オプションを使用しないと安全ではない。結果として、暗号化する際にはpassword_hash()を推奨。
ソルトとは?
暗号理論におけるソルトとは、ハッシュ処理の際に追加するデータのこと。
事前に計算済みのハッシュとそのもと入力の対応表(レインボーテーブル)で出力を解析される可能性を減らすために利用します。
端的にいうと、ちょっとした追加データのことで、追加することによりハッシュをクラックすることが劇的に難しくなると言われています。
なので、crypt()はソルトを使用しないのであれば使用しない!
- sha1
文字列のsha1hashを返す
多分、sha1型みたいなもん
- md5 文字列のmd5hashを返す 多分sha5型みたいなもん
password合致確認
暗号化したら、あっているか確認しなくてはならないので、
password_verify()を使用して確認します。
これはパスワードとhashがマッチする場合に、true それ以外にはfalseを返すものです。
つまり、元のpasswordの平文を見せるようにするのではなく、あくまで
正解、不正解を返すものとなっているようです。
https://www.php.net/manual/ja/function.password-verify.php
平文<- 暗号化される前、暗号化されていない状態のデータのこと
まとめ
まぁ、大人しくpassword_hash()を使って、password_verify()を使って、合致確認をしましょうね。