(PHP 4 >= 4.0.2, PHP 5, PHP 7)
mcrypt_encrypt — Cifra texto plano con los parámetros dados
$cipher
, string $key
, string $data
, string $mode
[, string $iv
] )Cifra los datos y los devuelve.
cipher
Una de las constantes MCRYPT_nombredelcifrado
, o el nombre del algoritmo como string.
key
La clave con la que los datos serán cifrados. Si el tamaño de la clave proporcionada no
está soportado por el cifrador, la función emitirá una advertencia y devolverá FALSE
data
Los datos que serán cifrados con el cifrador
y modo dados a través de cipher
y mode
. Si el tamaño
de la información no es n * blocksize, ésta
será rellenada con '\0'.
El texto cifrado devuelto puede ser mayor al tamaño de datos que fue
especificado por el parámetro data
.
mode
Una de las constantes MCRYPT_MODE_nombredelmodo
, o una de las siguientes strings: "ecb", "cbc", "cfb", "ofb", "nofb" o "stream".
iv
Utilizado para la inicialización en los modos CBC, CFB, OFB, y en algunos algoritmos en el modo STREAM. Si el tamañlo del IV proporcionado no está soportado por el modo de encadenamiento o no se proporcionó ninún IV, y el modo de encadenamiento requiere uno, la función emitirá una advertencia y devolverá FALSE
.
Devuelve los datos cifrados, en formato cadena o FALSE
en caso de error.
Versión | Descripción |
---|---|
5.6.0 |
Tamaños incorrectos en key y iv
ya no son admitidos. mcrypt_encrypt() emitirá
una advertencia y devolverá FALSE si los datos de entrada son incorrectos. Anteriormente la clave y
el IV eran rellenados con bytes '\0' hasta el siguiente tamaño válido.
|
Ejemplo #1 Ejemplo de mcrypt_encrypt()
<?php
# --- ENCRYPTION ---
# la clave debería ser binaria aleatoria, use scrypt, bcrypt o PBKDF2 para
# convertir un string en una clave
# la clave se especifica en formato hexadecimal
$key = pack('H*', "bcb04b7e103a0cd8b54763051cef08bc55abe029fdebae5e1d417e2ffb2a00a3");
# mostrar el tamaño de la clave, use 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 = "Este estring estaba encriptado con AES-256 / CBC / ZeroBytePadding.";
# crear una aleatoria IV para utilizarla co condificación 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 (tamaño de bloque Rijndael = 128)
# para hacer el texto confidencial
# solamente disponible para entradas codificadas que nunca finalizan con el
# el valor 00h (debido al relleno con ceros)
$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key,
$plaintext, MCRYPT_MODE_CBC, $iv);
# anteponer la IV para que esté disponible para el descifrado
$ciphertext = $iv . $ciphertext;
# codificar el texto cifrado resultante para que pueda ser representado por un string
$ciphertext_base64 = base64_encode($ciphertext);
echo $ciphertext_base64 . "\n";
# === ADVERTENCIA ===
# El texto cifrado resultante no tiene añadida integridad o autenticidad
# y no está protegido contra los ataques de relleno de oracle.
# --- DESCIFRADO ---
$ciphertext_dec = base64_decode($ciphertext_base64);
# recupera la IV, iv_size debería crearse usando mcrypt_get_iv_size()
$iv_dec = substr($ciphertext_dec, 0, $iv_size);
# recupera el texto cifrado (todo excepto el $iv_size en el frente)
$ciphertext_dec = substr($ciphertext_dec, $iv_size);
# podrían eliminarse los caracteres con valor 00h del final del texto puro
$plaintext_dec = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key,
$ciphertext_dec, MCRYPT_MODE_CBC, $iv_dec);
echo $plaintext_dec . "\n";
?>
El resultado del ejemplo sería:
Tamaño de la clave: 32 ENJW8mS2KaJoNB5E5CoSAAu0xARgsR1bdzFWpEn+poYw45q+73az5kYi4j+0haevext1dGrcW8Qi59txfCBV8BBj3bzRP3dFCp3CPQSJ8eU= Este estring estaba encriptado con AES-256 / CBC / ZeroBytePadding.