Estas funciones trabajan usando mcrypt.
Esta es una interfaz a la librería mcrypt, que soporta una gran
variedad de algoritmos de bloque como DES, TripleDES, Blowfish
(por defecto), 3-WAY, SAFER-SK64, SAFER-SK128, TWOFISH, TEA, RC2 y
GOST en los modos de cifrado CBC, OFB, CFB y ECB. Adicionalmente, soporta
RC6 e IDEA que se consideran "no-libres".
Para usarlos, descarga libmcrypt-x.x.tar.gz de aquí y sigue las instrucciones
de instalación incluidas. Necesitas compilar PHP con el parámetro
--with-mcrypt para activar esta extensión.
mcrypt puede usarse para encriptar y desencriptar usando los cifrados
mencionados arriba. Los cuatro comandos importantes de mcrypt
(mcrypt_cfb(), mcrypt_cbc(),
mcrypt_ecb(), y
mcrypt_ofb()) pueden operar en ambos modos que
se llaman MCRYPT_ENCRYPT y MCRYPT_DECRYPT, respectivamente.
Ejemplo 1. Encripta un valor de entrada con TripleDES en modo ECB <?php
$key = "esta es una clave muy secreta";
$input = "Nos vemos a las 9 en punto en el lugar secreto.";
$encrypted_data = mcrypt_ecb(MCRYPT_TripleDES, $key, $input, MCRYPT_ENCRYPT);
?> |
|
Este ejemplo devolverá los datos encriptados como una cadena en
$encrypted_data.
mcrypt puede operar en cuatro modos de cifrado (CBC, OFB, CFB y ECB). Perfilaremos
el uso normal de cada uno de estos modos. Para una mejor referencia y una discusión
más completa ver Applied Cryptography by Schneier (ISBN 0-471-11709-9).
ECB (electronic codebook o libro de códigos electrónico) va bien para datos aleatorios, tales como
encriptar otras claves. Puesto que los datos son cortos y aleatorios, las desventajas de
ECB tienen un efecto negativo favorable.
CBC (cipher block chaining o cifrado en bloque encadenado) es especialmente útil para encriptar ficheros,
donde incrementa significativamente la seguridad por encima de ECB.
CFB (cipher feedback o cifrado realimentado) es el mejor modo de encriptar flujos de bytes donde
cada byte debe ser encriptado.
OFB (output feedback o salida realimentada) es comparable al CFB, pero puede usarse en
aplicaciones donde la propagación de errores no puede tolerarse.
Actualmente PHP no soporta el encriptado/desencriptado de flujos de bits.
Por ahora, sólo soporta el manejo de cadenas.
Para una lista completa de los cifrados soportados, ver las definiciones al final de
mcrypt.h. La regla general es que se puede acceder al cifrado desde PHP con
MCRYPT_nombredelcifrado.
Aquí hay una pequeña lista de los cifrados que estan soportados actualmente por la
extensión mcrypt. Si un cifrado no está listado aquí, pero está listado por mcrypt
como soportado, puedes asumir con seguridad que ésta documentación está caduca.
Debes (en los modos CFB y OFB) o puedes (en el modo CBC) suministrar un
vector de inicialización (IV) a la correspondiente función de cifrado. El IV debe
ser único y debe ser el mismo cuando desencriptas o encriptas. Con datos que son
guardados encriptados, puedes cojer la salida de una función de índice
bajo la cual los datos son almacenados (ej. la clave MD5 de un fichero).
Alternativamente, puedes transmitir el IV junto con los datos encriptados
(ver capítulo 9.3 de Applied Cryptography by Schneier (ISBN 0-471-11709-9) para una discusión de éste
asunto).