PHPでログインフォームを作成する際に、パスワードを暗号化する方法はいくつかあります。
私がudemyなどの動画教材で観た限りでは、
md5
や
SHA1
でハッシュを返す方法が多かったのですが、
現在はどちらも「非推奨」との事でしたので、コードの書き換えを行いました。
md5
で暗号化した場合は、認証の際にもう一度
md5
をかけてイコール判定を行います。
class Account {
private $con;
private $errorArray;
public function __construct($con) {
$this->con = $con;
$this->errorArray = array();
// アカウント登録:データベースへの挿入
private function insertUserDetails($username, $email, $pass) {
$encryptedPw = md5($pw);
$result = mysqli_query($this->con, "INSERT INTO users VALUES (NULL, '$username', '$email', '$encryptedPw')");
return $result;
// ログイン処理:ユーザーネームとパスワード判定
public function login($username, $pass) {
$pass = md5($pass);
$query = mysqli_query($this->con, "SELECT * FROM users WHERE username='$username' AND password='$pass'");
if (mysqli_num_rows($query) == 1) {
return true;
} else {
array_push($this->errorArray, Constants::$loginFailed);
return false;
password_hashとpassword_verifyの暗号化 (After)
password_hashで暗号化する場合は、password_verifyで認証を行います。
Account.php
class Account {
// 省略
// アカウント登録:DB挿入
private function insertUserDetails($un, $fn, $ln, $em, $pw) {
$encryptedPw = password_hash($pw, PASSWORD_DEFAULT); // 変更
$date = date("Y-m-d");
$result = mysqli_query($this->con, "INSERT INTO users VALUES (NULL, '$un', '$fn', '$ln', '$em', '$encryptedPw', '$date')");
return $result;
// ログイン処理:ユーザーネームとパスワード判定
public function login($username, $pass) {
$query = mysqli_query($this->con, "SELECT password FROM users WHERE username='$username'");
$checkPass = mysqli_fetch_row($query);
if (password_verify($pass, $checkPass[0])) {
return true;
} else {
array_push($this->errorArray, Constants::$loginFailed);
return false;
password_verify
安全なパスワードハッシュ