LoginSignup
4

More than 5 years have passed since last update.

かつお君へ PHPのcryptでログイン処理を作成

Last updated at Posted at 2015-07-04

cryptはDESによるハッシュ生成の場合、8文字になります。
SALTを指定することにより他の暗号化処理よりセキュアです。
DBに保存するパスワードは、基本的に入力した値をハッシュ化し、照合する場合も入力されたパスワードをハッシュ化して同じかどうか確認します。
詳しくは下記のURLを参照して下さい。

bootstrap.phpの末尾にSALTを設定して下さい。
SALTはCRYPT_BLOWFISH($2a$ $2x$ $2y$ のどれか、2桁のコストパラメータ、$./0-9A-Za-zからランダムな22文字の系29文字)が好ましいかと思われます。
※SALTは例です。

App/Config/bootstrap.php

define('SALT','$2a$01$katsuokun./fight./2015');

ユーザ登録画面では、受け取ったPOSTデータのパスワードにcryptを掛けます。
先ほどdifine()でconstを作成したので、$を付けずにSALTのみで定数を読み込めます。

App/Controller/User.php
public function registUser() {
    if ($this->request->is('post'))
    {
        $this->loadModel('User');
        $this->request->data['User']['pass'] = crypt($this->request->data['User']['pass'], SALT);
        $this->User->save($this->request->data);
    }
}

ログイン時には受け取ったパスワードにcryptを掛けデータの確認をします。

App/Model/User.php

public function checkUserLogin($id, $pass) {
    return $this->find('first', array('conditions' => array('id' => $id, 'pass' => crypt($pass, SALT))));
}

これでパスワードは完全に利用するユーザ本人のみしか分からなくなりました。
こんなかんじで実装をお願いします。

こちらも参考にするといいかもしれません。
* 英数字のランダムパスワード作成

=====

SALTを固定化するのは良くないと指摘をいただいたので新しく書き直しました!

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
4