在 cakephp 中使用回调方法解密和加密
Decrypt and Encrypt using CallBack Methods in cakephp
我想使用回调方法在将值存储到我的数据库之前对其进行加密,并在将其显示回应用程序之前对其进行解密。
我使用了 documentation 中提供的示例之一。
在我的 core.php
中,我输入了以下内容:
Configure::write('Security.cipherCriptKey','su0HKssPmdbwgK6LdQLqzp0YmyaTI7zO');
在我的模型中,我使用了两种方法:
beforeSave()
public function beforeSave($options = array()) {
$value=$this->data['Internship']['encryptedindb'];
$encrypted = Security::encrypt($value, Configure::read('Security.cipherCriptKey'));
$this->data['Internship']['encryptedindb'] = $encrypted;
return true;
}
afterFind()
public function afterFind($results, $primary = false) {
foreach ($results as $key => $val) {
if(isset($val['Internship']['encryptedindb'])){
$results['Internship']['encryptedindb'] = Security::decrypt($val['Internship']['encryptedindb'], Configure::read('Security.cipherCriptKey'));
}
return $results;
}
}
beforeSave()
似乎工作正常,因为我可以在我的数据库中看到加密的值。但是,在我看来,当我想查看 decrypted 字段的内容时,它会将其显示为空字段。好像 afterFind()
方法无法解密它(它 returns 总是错误的)。
下面是我的应用程序视图的屏幕截图:
和加密值的数据库:
函数Security::encrypt($text)
使用AES-256算法加密$text
。它 returns 二进制数据,因此,它应该以二进制数据类型存储,而不是文本类型。
以下任何一项都应该有效:
- 二进制
- VARBINARY
- BLOB(TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB)。
设置为 VARBINARY(255)
应该就足够了。
如需进一步参考,请参阅:
我想使用回调方法在将值存储到我的数据库之前对其进行加密,并在将其显示回应用程序之前对其进行解密。
我使用了 documentation 中提供的示例之一。
在我的 core.php
中,我输入了以下内容:
Configure::write('Security.cipherCriptKey','su0HKssPmdbwgK6LdQLqzp0YmyaTI7zO');
在我的模型中,我使用了两种方法:
beforeSave()
public function beforeSave($options = array()) { $value=$this->data['Internship']['encryptedindb']; $encrypted = Security::encrypt($value, Configure::read('Security.cipherCriptKey')); $this->data['Internship']['encryptedindb'] = $encrypted; return true; }
afterFind()
public function afterFind($results, $primary = false) { foreach ($results as $key => $val) { if(isset($val['Internship']['encryptedindb'])){ $results['Internship']['encryptedindb'] = Security::decrypt($val['Internship']['encryptedindb'], Configure::read('Security.cipherCriptKey')); } return $results; } }
beforeSave()
似乎工作正常,因为我可以在我的数据库中看到加密的值。但是,在我看来,当我想查看 decrypted 字段的内容时,它会将其显示为空字段。好像 afterFind()
方法无法解密它(它 returns 总是错误的)。
下面是我的应用程序视图的屏幕截图:
和加密值的数据库:
函数Security::encrypt($text)
使用AES-256算法加密$text
。它 returns 二进制数据,因此,它应该以二进制数据类型存储,而不是文本类型。
以下任何一项都应该有效:
- 二进制
- VARBINARY
- BLOB(TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB)。
设置为 VARBINARY(255)
应该就足够了。
如需进一步参考,请参阅: