php cakephp encryption cakephp-2.x

Descifrar y cifrar usando métodos CallBack en cakephp



encryption cakephp-2.x (1)

La función Security::encrypt($text) usa el algoritmo AES-256 para encriptar $text . Devuelve datos binarios, y como tal, debe almacenarse en un tipo de datos binarios, en lugar de un tipo de texto.

Cualquiera de los siguientes debería funcionar:

  • BINARIO
  • VARBINARIO
  • BLOB (TINYBLOB, BLOB, MEDIUMBLOB y LONGBLOB).

Configurarlo en VARBINARY(255) probablemente sea suficiente.

Para mayor referencia, ver:

Quiero utilizar los métodos de devolución de llamada para encriptar un valor antes de que se almacene en mi base de datos y descifrarlo antes de volver a mostrarlo en la aplicación.

Usé uno de los ejemplos proporcionados en la documentación .

En mi core.php pongo lo siguiente:

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

En mi Modelo, utilicé dos métodos:

  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; } }

El beforeSave() parece estar funcionando bien, ya que puedo ver en mi base de datos el valor encriptado. Sin embargo, en mi opinión, y cuando quisiera ver descifrado el contenido del campo, lo muestra como un campo vacío. Como si el método afterFind() no pudiera descifrarlo (siempre devuelve falso).

A continuación se muestra una captura de pantalla de la vista de mi aplicación:

Y la base de datos con los valores encriptados: