添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
2
3

More than 3 years have passed since last update.

PHPのパスワード暗号化(md5とSHA1)&(password_hashとpassword_verify)

Last updated at Posted at 2020-06-26

PHPでログインフォームを作成する際に、パスワードを暗号化する方法はいくつかあります。

私がudemyなどの動画教材で観た限りでは、 md5 SHA1 でハッシュを返す方法が多かったのですが、
現在はどちらも「非推奨」との事でしたので、コードの書き換えを行いました。

md5の暗号化 (Before)

md5 で暗号化した場合は、認証の際にもう一度 md5 をかけてイコール判定を行います。

Account.php
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
安全なパスワードハッシュ

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3