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

Compártelo:
  • Print this article!
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • LinkedIn
  • Ping.fm
  • RSS
  • Twitter