Расшифруйте и зашифруйте, используя методы CallBack в cakephp

Я хочу использовать методы Callbacks, чтобы зашифровать значение, прежде чем оно будет сохранено в моей базе данных, и расшифровать его, прежде чем отобразить обратно в приложении.

Я использовал один из примеров, приведенных в документации.

В моем core.php Я поставил следующее:

Configure::write('Security.cipherCriptKey','su0HKssPmdbwgK6LdQLqzp0YmyaTI7zO');

В моей модели я использовал два метода:

  1. 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;
    }
    
  2. 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() кажется, работает нормально, так как я могу видеть в моей базе данных значение в зашифрованном виде. Однако, на мой взгляд, и когда я хотел бы увидеть расшифровку содержимого поля, оно отображает его как пустое поле. Как будто afterFind() Метод не может расшифровать его обратно (он всегда возвращает false).

Ниже приведен скриншот моего приложения:

Посмотреть

И база данных со значениями в зашифрованном виде:

база данных

1 ответ

Решение

Функция Security::encrypt($text) использует алгоритм AES-256 для шифрования $text, Он возвращает двоичные данные, и поэтому он должен храниться в двоичном типе данных, а не в текстовом типе.

Любое из следующего должно работать:

  • BINARY
  • VARBINARY
  • BLOB (TINYBLOB, BLOB, MEDIUMBLOB и LONGBLOB).

Установка его в VARBINARY(255) должно быть достаточно.

Для дальнейшего ознакомления смотрите:

Другие вопросы по тегам