cakephp3パスワードハッシュ
実装
今回はハッシュだけ試すのでshellで実験
app/App/Console/Command/Sample1Shell.php
<?php namespace App\Console\Command; use Cake\Console\Shell; use Cake\Auth\SimplePasswordHasher; use Cake\Auth\WeakPasswordHasher; use Cake\Auth\FallbackPasswordHasher; use App\Auth\DumbPasswordHasher; /** * Sample1 shell command. */ class Sample1Shell extends Shell { /** * main() method. * * @return bool|int Success or error code. */ public function main() { $password = "password"; echo "Text\n"; echo $password . "\n"; echo "\n"; // デフォルトのパスワードハッシュ echo "SimplePasswordHasher\n"; $hasher = new SimplePasswordHasher(); echo $hasher->hash($password) . "\n"; echo $hasher->hash($password) . "\n"; echo "\n"; // 弱めのパスワードハッシュ echo "WeakPasswordHasher\n"; $hasher = new WeakPasswordHasher(); echo $hasher->hash($password) . "\n"; echo $hasher->hash($password) . "\n"; echo "\n"; // 複数のハッシュパターンを内蔵 echo "FallbackPasswordHasher\n"; $hasher = new FallbackPasswordHasher([ "hashers" => ['Simple', 'Weak'] ]); echo $hasher->hash($password) . "\n"; echo $hasher->hash($password) . "\n"; echo "\n"; // 独自ハッシュ echo "DumbPasswordHasher\n"; $hasher = new DumbPasswordHasher(); echo $hasher->hash($password) . "\n"; echo $hasher->hash($password) . "\n"; echo "\n"; } }
結果
[vagrant@localhost 05_shell]$ sh app/App/Console/cake sample1 Welcome to CakePHP v3.0.0-dev3 Console --------------------------------------------------------------- App : App Path: /vagrant/projects/cakephp3-sample/05_shell/app/App/ --------------------------------------------------------------- Text password SimplePasswordHasher $2y$10$vJ9JPTBVDyeDcCaKpCfR0eWDPS4e9/nfC/nKNKnqydLTFgV4T6lKi $2y$10$Q/hmRu3MtT1CSpJNgmYfke4lB.Ze76osfDNXQNwNBZNlHU5GwY.JO WeakPasswordHasher 741f5ad6abd52a56054d8519dec64efc24fc849c 741f5ad6abd52a56054d8519dec64efc24fc849c FallbackPasswordHasher $2y$10$zz4LjC5KWDE2Ou5xTQYd9OITvkLI4.AAnQGIInD6Lb1XxveZFjDgW $2y$10$rOpBUy5vJdFyxQ90WambL.15OsEuU4qtgM5ZkxVNTPCoewssWuKpO DumbPasswordHasher 5f4dcc3b5aa765d61d8327deb882cf99 5f4dcc3b5aa765d61d8327deb882cf99 [vagrant@localhost 05_shell]$
既存ハッシュクラス
SimplePasswordHasher
password_hash、password_verifyにて暗号化・チェックを行っているようです。
暗号化の度に値が変更されていることからなんらかのパターンで照合を行うような感じ
WeakPasswordHasher
今までの暗号化方式かと、Security?を使用した暗号化を使用している
独自ハッシュ関数について
- app\App\Auth配下に作成
- \Cake\Auth\AbstractPasswordHasherを継承すること
上記により、他のHasherと同じように制御が可能
app/App/Auth/DumbPasswordHasher.php
<?php /** * Created by PhpStorm. * User: ????? * Date: 2014/06/15 * Time: 8:50 */ namespace App\Auth; use \Cake\Auth\AbstractPasswordHasher; class DumbPasswordHasher extends AbstractPasswordHasher{ public function hash($password){ return md5($password); } public function check($password, $hashedPassword){ return (md5($password) == $hashedPassword); } }
hashで暗号化、checkで同一チェックを行っているよう
今回はドキュメントと同じくmd5のしょぼい暗号化にしています
まとめ
現在、使用できる暗号化は2パターンですが、独自の暗号化方法も簡単に組み込めるようです。
自分専門の暗号化を組み込みたい場合は必須かと、面倒な場合はWeakあたり、version5.5以降の場合はSimpleを使用できるのかな?