hel*_*ikh 1 encryption cakephp encryption-asymmetric cakephp-2.0 cakephp-2.1
我正在使用Cakephp 2.3我正在尝试加密我存储到db中的数据,所以我搜索了一种方法来执行此操作.我找到了这个http://bakery.cakephp.org/articles/utoxin/2009/08/01/cryptable-behaviore
我不知道它是最好的行为或者如果有人有更好的行为那么请建议我..
所以这里的问题是我已经阅读了链接中的所有细节,但我仍然无法知道如何将我的字段保存加密到db
例如,我在控制器中有一个保存数据的功能
$this->Messages->save($this->request->data);
Run Code Online (Sandbox Code Playgroud)
如何在db中以加密方式保存此数据
然后是我的模态
public function getAllMessages($id){
return $this->find('all',array(
'order'=> array( 'idTextMessage DESC'),
'conditions' => array('User_id' => $id)));
}
Run Code Online (Sandbox Code Playgroud)
我该如何解密这些数据
我做了这个,但没有工作
class Message extends AppModel{
public $useTable = 'textmessage';
public $actsAs = array(
'Cryptable' => array(
'fields' => array(
'mobileNo',
'body'
)
)
);
Run Code Online (Sandbox Code Playgroud)
我没有使用过那个插件,但它是从2009年开始的,所以它现在已经很老了.我不会过分相信它.
使用Cake可以很容易地解密/加密Security::rijndael,而不需要使用插件(请注意,需要安装mcrypt php扩展 - 但它可能已经安装好了).
首先,在您的模型中,添加要加密的字段数组:
public $encryptedFields = array('mobile', 'body');
Run Code Online (Sandbox Code Playgroud)
然后,像这样实现一个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;
}
Run Code Online (Sandbox Code Playgroud)
你的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;
}
Run Code Online (Sandbox Code Playgroud)
注意我还没有测试过所有代码 - 它是我自己的应用程序中的点点滴滴一起攻击的.但它应该让你走上正轨.