Clase Encryption
La clase de encriptacion provee dos formas de encriptacion. Usa un esquema que pre-compila el mensaje usando una randomly hashed bitwise XOR esquema de codificación, el cual es entonces encriptado usando la libreria Mcrypt. Si Mcrypt no esta disponible en el servidor el mensaje codificado todavia proveera aun un razonable grado de seguridad para sesiones encriptadas u otros de proposito "ligero". Si Mcrypt está disponible, efectivamente tendrás una cadena de mensaje doblemente encriptada, la cual provee un alto grado de seguridad.
Estableciendo tu Clave
Una Clave es una pieza de información que controla el proceso criptográfico y permite que una cadena encriptada sea decodificada. De hecho, la clave que elijas proveera el unico medio para decodificar el dato que has encriptado con esa clave, así no solamente debes elejir cuidadosamente la clave, nunca debes cambiarla si tiene la intención de usarala para para mantener los datos persistentes.
Y ni que decir de que debes ser cuidadoso de donde guardas la clave, pues si alguien obtiene acceso a la clave, las informaciones seran facilmente decodificadas. Si tu servidor no esta completamente bajo tu control es imposible asegurar la clave de seguridad, asi que deberás pensar cuidadosamente antes de usaala en algo que requiere alta seguridad, como almacenar numeros de tarjetas de credito.
Para tomar la maxima ventaja del algoritmo de encriptación, tu clave deberá ser de 32 caracteres de longitud (128 bits). La clave debe ser aleatoriamente una cadena que tu puedes concoct, con numeros y letras tanto mayusculas como minusculas. Tu claveno deberá ser una cadena de texto simple. De manera a que sea lo mas seguara criptograficamente hablando se necesita que la clave sea lo mas aleatoria posible.
Tu clave tampoco puede ser almacenada en tu application/config/config.php, o puedes diseñar tu propio mecanismo de almacenamiento y pasarla dinamicamente cuando codificas/decodificas.
Para guardar tu clave en tu application/config/config.php, abre el archivo y establece:
$config['encryption_key'] = "TU CLAVE";
Longitud del Mensaje
Es importante para usted saber que los mensajes codificados generan aproximadamente 2.6 veces la longitud del mensaje original Por ejemplo, si encriptas la cadena "mi super dato secret", cuya longitud es de 21 caracteres en longitud, terminaras con una cadena que es de aproximadamente 55 caracteres (decimos aproximadamente debido a que la cadena codificada incrementa en agrupaciones de 64 bit, por tanto no es necesariamente linear). Manteniendo esta información en mente cuando seleccione el mecanismo de almacenamietno. Los cookies, por ejemplo pueden mantener solamente 4K de información.
Inicializando la clase
Igual que en las otras clases en CodeIgniter, la clase Encryptation es inicializada en tu controlador usando la funcion: $this->load->library
$this->load->library('encrypt');
Una vez cargada, el objeto Encrypt estara disponible usando: $this->encrypt
$this->encrypt->encode()
Realizando el cifrado de datos y lo devuelve como una cadena. Ejemplo:
$msg = 'Mi mensaje secreto';
$encrypted_string = $this->encrypt->encode($msg);
Opcionalmente puedes pasar tu clave de encriptación en el segundo parámetro si no quiere usar la clave que esta en tu archivo de configuración:
$msg = 'Mi mensaje secreto';
$key = 'clave-super-secreta';
$encrypted_string = $this->encrypt->encode($msg, $key);
$this->encrypt->decode()
Desencripta un mensaje encriptado. Ejemplo:
$cadena_encryptada = 'APANtByIGI1BpVXZTJgcsAG8GZl8pdwwa84';
$cadena_textoplano = $this->encrypt->decode($cadena_encriptada);
$this->encrypt->set_cipher();
Te permite establecer un cifrado Mcrypt. Por defeco usa MCRYPT_RIJNDAEL_256. Ejemplo:
$this->encrypt->set_cipher(MCRYPT_BLOWFISH);
Por favor visite php.net para tener un alista de cifradores disponibles.
Si prefieres probar manualmente si su servidor soporta Mcrypt puedes usar:
echo ( ! function_exists('mcrypt_encrypt')) ? 'Nop' : 'Sip';
$this->encrypt->set_mode();
Te permite establecer un modo MCRYPT. Por defecto usa MCRYPT_MODE_ECB. Ejemplo:
$this->encrypt->set_mode(MCRYPT_MODE_CFB);
Por favor visite php.net para tener un alista de modos disponibles.
$this->encrypt->sha1();
La funcion de codificacion SHA1. Provee una cadena y la retorna un hash de 160 bit de una sola forma. Nota: SHA1, es como el MD5 es no-decodificable. Ejemplo:
$hash = $this->encrypt->sha1('alguna cadena');
Muchas instalaciones de PHP tienen soporte para SHA1 por defecto, por tanto lo unico que necesitas para codificar es usar la funcion nativa:
$hash = sha1('Alguna Cadena');
Si tu servidor no soporta SHA1 puedes usar la funcion proveida.