En ocasiones necesitamos guardar datos sensibles en la base de datos de nuestra aplicación. En este caso deberemos encriptarla y que mejor que con la librería Mcrypt.
Cada vez que mostremos dicha información al usuario o la actualicemos/guardemos deberemos asegurarnos de encriptarla/desencriptarla.
En el caso de que estemos utilizando symfony esta tarea resulta casi trivial ya que una vez modificada los getters y setter de la clase del modelo podremos olvidador de que es un campo “sensible” y podremos tratarlo como cualquier otro.
Un ejemplo de cómo quedaría la clase del modelo podría ser esta:
class modelClass extends BaseModelClass{ private $key = 'rAn5om-.:_ch$ar7ters'; private $iv; public function setSensitiveField($v){ if(function_exists('mcrypt_cfb')){ $this->iv = substr(md5($this->key), 0,mcrypt_get_iv_size(MCRYPT_CAST_256,MCRYPT_MODE_CFB)); $v = mcrypt_cfb(MCRYPT_CAST_256, $this->key, $v, MCRYPT_ENCRYPT, $this->iv); } return parent::setSensitiveField($v); } public function getSensitiveField(){ $v = parent::getSensitiveField(); if(function_exists('mcrypt_cfb')){ $this->iv = substr(md5($this->key), 0,mcrypt_get_iv_size(MCRYPT_CAST_256,MCRYPT_MODE_CFB)); $v = mcrypt_cfb(MCRYPT_CAST_256, $this->key, $v, MCRYPT_DECRYPT, $this->iv); } return $v; } }