在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()