在cakephp中使用回调方法进行解密和加密
我希望使用回调方法在值存储到数据库之前对其进行加密,并在将其显示回应用程序之前对其进行解密 我使用了中提供的一个示例 在我的在cakephp中使用回调方法进行解密和加密,php,cakephp,encryption,cakephp-2.x,Php,Cakephp,Encryption,Cakephp 2.x,我希望使用回调方法在值存储到数据库之前对其进行加密,并在将其显示回应用程序之前对其进行解密 我使用了中提供的一个示例 在我的core.php中,我放置了以下内容: Configure::write('Security.cipherCriptKey','su0HKssPmdbwgK6LdQLqzp0YmyaTI7zO'); 在我的模型中,我使用了两种方法: beforeSave() public function beforeSave($options = array()) { $va
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;
}
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;
}
}
afterFind()
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;
}
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()
似乎工作正常,因为我可以在数据库中看到加密的值。但是,在我看来,当我想看到字段解密后的内容时,它会将其显示为空字段。好像afterFind()
方法无法将其解密回来(它总是返回false)
下面是我的应用程序视图的屏幕截图:
和具有加密值的数据库:
函数
Security::encrypt($text)
使用AES-256算法加密$text
。它返回二进制数据,因此,它应该存储在二进制数据类型中,而不是文本类型中
以下任何一项都应起作用:
- 二进制文件
- VARBINARY
- BLOB(TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB)李>
VARBINARY(255)
可能就足够了
如需进一步参考,请参阅:
- 功能
Security::encrypt($text)
使用AES-256算法加密$text
。它返回二进制数据,因此,它应该存储在二进制数据类型中,而不是文本类型中
以下任何一项都应起作用:
- 二进制文件
- VARBINARY
- BLOB(TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB)李>
VARBINARY(255)
可能就足够了
如需进一步参考,请参阅:
- 功能
if(isset($val[实习]['encryptedindb'])中有一个输入错误。
。你缺少了实习
的引号。是的,我在这里粘贴代码时,这只是一个输入错误。请按照你运行的方式发布代码。上面充满了语法错误,没有什么意义。抱歉搞得一团糟。我编辑了。好的,谢谢。实习.encryptedindb的数据类型是什么?另外,请确认Tobeencrypted
是字段EncryptedDB
的自定义标签,我相信如果(isset($val[实习]['EncryptedDB'))
中有输入错误。你缺少了实习
的引号。是的,我在这里粘贴代码时,这只是一个输入错误。请按照你运行的方式发布代码。上面充满了语法错误,没有什么意义。抱歉搞得一团糟。我编辑了。好的,谢谢。实习.encryptedindb的数据类型是什么?另外,请确认Tobeencrypted
是字段encryptedindb
的自定义标签是否有任何方法解密密码?AES-256允许解密加密数据。CakePHP为此提供了函数Security::decrypt()
。有没有办法解密密码?AES-256允许对加密数据进行解密。CakePHP为此提供了函数Security::decrypt()
。