1

私はCakephp 2.3に取り組んでいます.dbに保存しているデータを暗号化しようとしているので、これを行う方法を探しました. これを見つけましたhttp://bakery.cakephp.org/articles/utoxin/2009/08/01/cryptable-behaviore

私はそれが最善の行動であるかどうかわからないか、誰かがより良い行動をしているなら、私に提案してください..

ここでの問題は、リンクのすべての詳細を読んだことですが、暗号化されたフィールドをデータベースに保存する方法を知ることができません

たとえば、コントローラーにデータを保存する関数があります

  $this->Messages->save($this->request->data);

このデータをデータベースに暗号化して保存するにはどうすればよいですか

そして私のモーダル

 public function getAllMessages($id){

    return  $this->find('all',array(
        'order'=> array( 'idTextMessage DESC'),
        'conditions' => array('User_id' => $id)));
}

このデータを解読するにはどうすればよいですか

私はこれをしましたが、うまくいきませんでした

class Message extends AppModel{
public $useTable = 'textmessage';

public $actsAs = array( 
    'Cryptable' => array( 

        'fields' => array( 
            'mobileNo',
             'body' 
        ) 
    ) 
);
4

2 に答える 2

7

私はそのプラグインを使用していませんが、2009 年のものなので、かなり古いものです。私はそれをあまり信用しません。

Security::rijndaelプラグインを使用せずに、Cake の を使用して簡単に復号化/暗号化できます ( mcrypt php 拡張機能をインストールする必要があることに注意してください - ただし、既にインストールされている可能性があります)。

まず、モデルに、暗号化するフィールドの配列を追加します。

public $encryptedFields = array('mobile', 'body');

次に、次のように beforeSave を実装します。

public function beforeSave($options = array()) {
    foreach($this->encryptedFields as $fieldName){
        if(!empty($this->data[$this->alias][$fieldName])){
            $this->data[$this->alias][$fieldName] = Security::rijndael($this->data[$this->alias][$fieldName], Configure::read('Security.key'), 'encrypt');
        }
    }
    return true;
}

afterFind メソッドは、暗号化ではなく復号化する必要があることを除いて、ほとんど同じである必要があります。

public function afterFind($results = array()) {
    foreach($this->encryptedFields as $fieldName){
        if(!empty($results[$this->alias][$fieldName])){
            $results[$this->alias][$fieldName] = Security::rijndael($results[$this->alias][$fieldName], Configure::read('Security.key'), 'decrypt');
        }
    }
    return $results;
}

そのコードのすべてをテストしたわけではないことに注意してください。これは、自分のアプリの 1 つで断片からまとめてハッキングされたものです。しかし、それはあなたを正しい軌道に乗せるはずです。

于 2013-08-07T11:56:36.253 に答える