

cakephpで暗号の復号化がうまくいきません。  
詳しい方、ご教示ください。

$this_password = strval($this->data['password']);  
$this->request->data['password'] = Security::cipher($this_password, PASS_SEC);  
上記をデータベースに登録。

データベースから取り出し、以下を実行  
$decode_password = Security::cipher($check_login[0]['User']['password'],
PASS_SEC);


CC BY-SA 3.0
2015-06-03T10:51:31.023
10946
2015-06-04T00:53:25.890
8619
question
php cakephp
cakephpの暗号の復号化


Seucity::cipher()はCakePHPのマニュアルによれば[「脆弱な XOR 暗号を利用しています。従って、重要で機密性の高いデータへ
使うべきではありません」](http://book.cakephp.org/2.0/ja/core-utility-
libraries/security.html)だそうです。

パスワードを扱っているようですが、自己の認証用のパスワードなら、暗号化ではなく非可逆のハッシュ値を保存しておくべきです。それもただ単にハッシュ関数を通すだけでは不十分なので、PHP標準の[password_hash()](http://php.net/manual/ja/function.password-
hash.php)を使うと良いでしょう。認証の際は質問のようにDBに保存された値を復号して入力されたパスワードと比較するのではなく、入力されたパスワードを`password_hash`に通してその結果とDBに保存されたハッシュ値を比較します。

復元可能な形式でパスワードを保存する必要がある(たとえば他のアプリケーションの認証のためのパスワードを保存している)のであれば、相当慎重に実装する必要があります。`cipher()`は問題外ですし、どんな強力なアルゴリズムを使っていても質問にあるように固定のキーで暗号化していればセキュリティ的にはほぼ無意味です。

[体系的に学ぶ
安全なWebアプリケーションの作り方](https://www.hash-c.co.jp/wasbook/)には認証やパスワードの保存についても解説がありますので一読されることをお勧めします。


CC BY-SA 3.0
2015-06-04T00:53:25.890
10959
2015-06-04T00:53:25.890
5793
10946
answer