Easiest Blockchain~簡単 ブロックチェーン・Cloudの勉強ブログ~

ブロックチェーン技術の勉強のために学んだことをシェアしていきます。ブロックチェーン技術の基礎から応用まで幅広く勉強していきます。

phpパスワード暗号化「password_hash()、password_verify()」簡易ログインフォーム

こんにちはmiyaです。
しばらくプログラミングの勉強をブログにしていませんでした。

今年はぼちぼち再開していきます。
今年最初のテーマとしてphpの簡易ログイン処理を行っていきます。

大学で使用するウェブサービス(ゼミ生向け)を作成していて、メモとして残したいことを記事としていきます。

今回はパスワードをhash関数で暗号化し、ログインフォームを作成しました。

まずはログイン画面としてhtmlのコードです。
※headerやbody、metaなどのタグは省略します。

セッションをスタートさせておきます。

login.php

<?php
      session_start();
?>

<html>

<h3>LOG IN</h3>
<p>
     <form method="post" action="ref.php">
     パスワード:<input type="password" name="passwd" >
     <input type="submit" name="login">
     </form>
</p>

</html>


次にpassword_hash()を使用して、ハッシュ値を生成します。
今回はphpのインタラクティブモードを使用します。
Macの場合ターミナルから php -aコマンドでインタラクティブモードシェルを有効にします。
password_hash関数では第2引数に利用するアルゴリズムのコストを記述しますが、今回はデフォルトを使います。

>php -a
Interactive shell
>echo password_hash("ここに暗号化したいパスワード", PASSWORD_DEFAULT);
$2y$10$u9TjWGFXHmjp4aw1KLwxO.iWKO3e/2uNXLXqnoMYXOFNNNOn867yK


上記のようにハッシュ値が得られました。忘れずにコピーしておきましょう。

ログイン処理を書いていきます。
事前に成功した場合に表示するページ(success.php)と失敗した場合に表示するページ(error.php)を作成しておきます。

ここではpostを利用してinput.phpから入力されたパスワードを受け取って、パスワードが正しいかチェックし処理を分けていきます。
パスワードの確認のためpassword_verify関数を使用します。
password_verify関数では第1引数に入力されたパスワード、そして第2引数にハッシュ化されたパスワードを記述します。

ref.php

<?php
	if (strtoupper($_SERVER['REQUEST_METHOD'])=="POST"){
		$pass=$_POST['passwd'];
			if (password_verify($pass, "事前に生成したパスワードのhash値")){
				header("Location: http://localhost/success.php");
				exit();
			}
	}
	header("Location: http://localhost/error.php");
?>


以上です!
今年最初の記事なので軽めにしておきます。

次回はデータベース(Mysql)あたりをいじっていこうかなと思います!。
hashに関する記事も書いていきたいと思います!


最後までありがとうございました!