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

Я хочу использовать методы 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).

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

Посмотреть

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

база данных

2

Решение

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

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

  • BINARY
  • VARBINARY
  • большой двоичный объект (TINYBLOB, BLOB, MEDIUMBLOB и LONGBLOB).

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

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

5

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector