mcrypt_encrypt

(PHP 4 >= 4.0.2, PHP 5, PHP 7 < 7.2.0, PECL mcrypt >= 1.0.0)

mcrypt_encryptCifra un texto

Advertencia

Esta función está OBSOLETA a partir de PHP 7.1.0 y ha sido ELIMINADA a partir de PHP 7.2.0. Depender de esta función está fuertemente desaconsejado.

Descripción

mcrypt_encrypt(
    string $cipher,
    string $key,
    string $data,
    string $mode,
    string $iv = ?
): string|false

mcrypt_encrypt() cifra los datos y devuelve los datos cifrados.

Parámetros

cipher

One of the MCRYPT_ciphername constants, or the name of the algorithm as string.

key

La clave con la que se cifrarán los datos. Si el tamaño de la clave proporcionada no es compatible con el cipher, la función emitirá un warning y devolverá false

data

Los datos que se cifrarán, con el cipher y el mode indicado. Si el tamaño de los datos no es un múltiplo del tamaño de bloque, los datos se rellenarán con caracteres '\0', según sea necesario.

El texto cifrado devuelto puede ser más largo que el tamaño de los datos pasados como argumento a través de data.

mode

One of the MCRYPT_MODE_modename constants, or one of the following strings: "ecb", "cbc", "cfb", "ofb", "nofb" or "stream".

iv

Used for the initialization in CBC, CFB, OFB modes, and in some algorithms in STREAM mode. If the provided IV size is not supported by the chaining mode or no IV was provided, but the chaining mode requires one, the function will emit a warning and return false.

Valores devueltos

Devuelve los datos cifrados, como string o false si ocurre un error.

Ejemplos

Ejemplo #1 Ejemplo con mcrypt_encrypt()

<?php
# --- CIFRADO ---

# la clave debería ser un binario aleatorio, utilice la función scrypt, bcrypt
# o PBKDF2 para convertir una cadena de caracteres en una clave.
# La clave se especifica utilizando notación hexadecimal.
$key = pack('H*', "bcb04b7e103a0cd8b54763051cef08bc55abe029fdebae5e1d417e2ffb2a00a3");

# Muestra el tamaño de la clave utilizada; claves de 16, 24 o 32 bytes para
# AES-128, 192 y 256 respectivamente.
$key_size = strlen($key);
echo
"Tamaño de la clave: " . $key_size . "\n";

$plaintext = "Esta cadena de caracteres ha sido cifrada en AES-256 / CBC / ZeroBytePadding.";

# Crea un IV aleatorio para usar con el cifrado CBC
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);

# Crea un texto cifrado compatible con AES (Rijndael block size = 128)
# para mantener el texto confidencial.
# Solo aplicable para entradas codificadas que nunca terminan
# con el valor 00h (debido a la eliminación predeterminada de ceros finales)
$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key,
$plaintext, MCRYPT_MODE_CBC, $iv);

# Se añade el IV al inicio del texto cifrado para hacerlo disponible para el descifrado
$ciphertext = $iv . $ciphertext;

# Codifica el texto cifrado resultante para que pueda ser representado por una cadena de caracteres
$ciphertext_base64 = base64_encode($ciphertext);

echo
$ciphertext_base64 . "\n";

# === ADVERTENCIA ===

# El texto cifrado resultante no contiene integridad ni autenticación
# y no está protegido contra ataques de tipo "oracle padding".

# --- DESCIFRADO ---

$ciphertext_dec = base64_decode($ciphertext_base64);

# Obtiene el IV, iv_size debe haber sido creado utilizando la función
# mcrypt_get_iv_size()
$iv_dec = substr($ciphertext_dec, 0, $iv_size);

# Obtiene el texto del cipher (todo, excepto $iv_size del inicio)
$ciphertext_dec = substr($ciphertext_dec, $iv_size);

# Se deben eliminar los caracteres de valor 00h del final del texto plano
$plaintext_dec = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key,
$ciphertext_dec, MCRYPT_MODE_CBC, $iv_dec);

echo
$plaintext_dec . "\n";
?>

El ejemplo anterior mostrará :

Tamaño de la clave: 32
ENJW8mS2KaJoNB5E5CoSAAu0xARgsR1bdzFWpEn+poYw45q+73az5kYi4j+0haevext1dGrcW8Qi59txfCBV8BBj3bzRP3dFCp3CPQSJ8eU=
Esta cadena de caracteres ha sido cifrada en AES-256 / CBC / ZeroBytePadding.

Ver también