« Controlar el MediaPortal con un Wiimote - AirRivals - Mi primera batalla entre naciones »

Cifrado con Rijndael (AES) simétrico en PHP

22 September 2008


A continuación, un ejemplo funcional de un cifrado de datos simétrico usando Rijndael en su modo de 256bits.

<?php
header(”Content-Type: text/plain; charset=utf-8″);

# Creamos una clave de 256bits o 32 caracteres
$key = md5(”Clave para el cifrado de datos `12345`!·$%&/()=”);

# Cadena a encriptar
$data = “Estamos aquí reunidos para ver el funcionamiento de un cifrado simétrico. ALE!”;

/**
* PROCESO DE CIFRADO
**/
# Inicializa el mudulo de cifrado
$td = mcrypt_module_open(’rijndael-256′, ”, ‘ofb’, ”);

# Crea el vector de inicializacion y establece el tamaño de la clave (aleatorio)
$vi = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_RANDOM);

# Inicializa el cifrado
mcrypt_generic_init($td, $key, $vi);

# Cifra los datos
$encryptedData = mcrypt_generic($td, $data);

# Termina el manejador de cifrado y cierra el modulo
mcrypt_generic_deinit($td);
mcrypt_module_close($td);

# Muestra el cifrado
echo “Cifrado:\n{$encryptedData}\n\n”;

/**
* PROCESO DE DESCIFRADO
**/
# Inicializa el mudulo de cifrado
$td = mcrypt_module_open(’rijndael-256′, ”, ‘ofb’, ”);

# Inicializa el cifrado
mcrypt_generic_init($td, $key, $vi);

# Crea el vector de inicializacion y establece el tamaño de la clave (aleatorio)
$vi = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_RANDOM);

# Descifra los datos
$decryptedData = mdecrypt_generic($td, $encryptedData);

# Termina el manejador de descifrado y cierra el modulo
mcrypt_generic_deinit($td);
mcrypt_module_close($td);

# Muestra el descifrado
echo “Descifrado:\n{$decryptedData}\n\n”;
?>

Aquí se ha utilizado una clave de longitud fija de 32 caracteres, pero hay muchas más variantes y posibilidades. Desde utilizar una longitud aleatoria hasta tener 2 claves y un sin fin de opciones más. Podemos complicarlo lo que queramos, contra más complicado más difícil será reventarlo (aunque todavía no se conoce el método).

Ale!!


One Response to ' Cifrado con Rijndael (AES) simétrico en PHP '

Subscribe to comments with RSS or TrackBack to ' Cifrado con Rijndael (AES) simétrico en PHP '.

  1. Jaume said,

    on September 23rd, 2008 at 3:28 am

    Si vuestro sistema operativo es windows,
    quizás tengais que sustituir “MCRYPT_DEV_RANDOM”
    por “MCRYPT_RAND”

    El resto va fino.

Leave a reply