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)_