我希望使用回调方法在值存储到数据库之前对其进行加密,并在将其显示回应用程序之前对其进行解密。
我使用了documentation中提供的一个示例。
在我的core.php
中,我放入了以下内容:
Configure::write('Security.cipherCriptKey','su0HKssPmdbwgK6LdQLqzp0YmyaTI7zO');
在我的模型中,我使用了两种方法:
beforeSave()
公共函数数组($options=beforeSave()){$value=$this->数据‘实习’;$encrypted =安全::encrypt($value,Configure::read('Security.cipherCriptKey'));$this->数据‘实习’= $encrypted;return true;}
afterFind()
公共函数afterFind ($results,$primary = false) { foreach ($results as $key => $val) {if(isset($val‘’Internship‘)){$results’‘Internship’=安全::decrypt($val‘’Internship‘,Configure::read('Security.cipherCriptKey'));} return $results;} }
beforeSave()
似乎工作得很好,因为我可以在我的数据库中看到加密值。然而,在我的视图中,当我想要查看解密的字段的内容时,它将其显示为一个空字段。就好像afterFind()
方法无法解密它一样(它总是返回false)。
下面是我的应用程序视图的截图:
和具有加密值的数据库:
发布于 2016-01-16 08:55:47
函数Security::encrypt($text)
使用AES-256算法对$text
进行加密。它返回二进制数据,因此,它应该以二进制数据类型存储,而不是文本类型。
以下任一操作都应该有效:
将其设置为VARBINARY(255)
可能就足够了。
有关更多参考信息,请参阅:
https://stackoverflow.com/questions/34818969
复制相似问题