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を固定化するのは良くないと指摘をいただいたので新しく書き直しました!