LIV. Funciones Criptográficas

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 .

  • MCRYPT_TripleDES

  • MCRYPT_ThreeWAY

  • MCRYPT_DES_COMPAT

  • MCRYPT_CAST128

  • MCRYPT_TEAN

  • MCRYPT_TWOFISH ( para las antiguas versiones mcrypt 2.x )

  • MCRYPT_TWOFISH128 ( TWOFISHxxx está disponible en las versiones más nuevas 2.x )

  • MCRYPT_RC6

  • MCRYPT_IDEA



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

Tabla de contenidos
mcrypt_cbc -- Encripta/desencripta datos en modo CBC
mcrypt_cfb -- Encripta/desencripta datos en modo CFB
mcrypt_create_iv -- Crea un vector de inicialización (IV) a partir de una fuente aleatoria
mcrypt_decrypt -- Decrypts crypttext with given parameters
mcrypt_ecb -- Encripta/desencripta datos en modo ECB
mcrypt_enc_get_algorithms_name -- Returns the name of the opened algorithm
mcrypt_enc_get_block_size -- Returns the blocksize of the opened algorithm
mcrypt_enc_get_iv_size -- Returns the size of the IV of the opened algorithm
mcrypt_enc_get_key_size -- Returns the maximum supported keysize of the opened mode
mcrypt_enc_get_modes_name -- Returns the name of the opened mode
mcrypt_enc_get_supported_key_sizes -- Returns an array with the supported keysizes of the opened algorithm
mcrypt_enc_is_block_algorithm_mode -- Checks whether the encryption of the opened mode works on blocks
mcrypt_enc_is_block_algorithm -- Checks whether the algorithm of the opened mode is a block algorithm
mcrypt_enc_is_block_mode -- Checks whether the opened mode outputs blocks
mcrypt_enc_self_test -- This function runs a self test on the opened module
mcrypt_encrypt -- Encrypts plaintext with given parameters
mcrypt_generic_deinit -- This function deinitializes an encryption module
mcrypt_generic_end -- This function terminates encryption
mcrypt_generic_init -- This function initializes all buffers needed for encryption
mcrypt_generic -- This function encrypts data
mcrypt_get_block_size -- Obtiene el tamaño de bloque del cifrado indicado
mcrypt_get_cipher_name -- Obtiene el nombre del cifrado especificado
mcrypt_get_iv_size -- Returns the size of the IV belonging to a specific cipher/mode combination
mcrypt_get_key_size -- Obtiene el tamaño de la clave de un cifrado
mcrypt_list_algorithms -- Get an array of all supported ciphers
mcrypt_list_modes -- Get an array of all supported modes
mcrypt_module_close -- Close the mcrypt module
mcrypt_module_get_algo_block_size -- Returns the blocksize of the specified algorithm
mcrypt_module_get_algo_key_size -- Returns the maximum supported keysize of the opened mode
mcrypt_module_get_supported_key_sizes -- Returns an array with the supported keysizes of the opened algorithm
mcrypt_module_is_block_algorithm_mode -- This function returns if the the specified module is a block algorithm or not
mcrypt_module_is_block_algorithm -- This function checks whether the specified algorithm is a block algorithm
mcrypt_module_is_block_mode -- This function returns if the the specified mode outputs blocks or not
mcrypt_module_open -- This function opens the module of the algorithm and the mode to be used
mcrypt_module_self_test -- This function runs a self test on the specified module
mcrypt_ofb -- Encripta/desencripta datos en modo OFB
mdecrypt_generic -- This function decrypts data