md5()
Artículo sobre la función PHP md5(), que calcula el hash MD5 de una cadena. Útil para trabajar con cadenas en PHP.
La función PHP md5() calcula el hash MD5 de una cadena. MD5 (Message-Digest Algorithm 5) es una función unidireccional: convierte cualquier entrada en un valor fijo de 128 bits, y no es posible revertir el resultado para obtener la cadena original. Esta página cubre la sintaxis, los parámetros, ejemplos ejecutables, en qué casos MD5 sigue siendo apropiado y cuándo es necesario utilizar algo más seguro.
Sintaxis
md5(string $str, bool $raw_output = false): stringLa función acepta dos parámetros:
$str— la cadena de entrada que se va a hashear.$raw_output— boolean opcional. Cuando esfalse(valor predeterminado),md5()devuelve una cadena hexadecimal de 32 caracteres en minúsculas. Cuando estrue, devuelve el hash binario sin procesar de 16 bytes.
El valor de retorno siempre tiene la misma longitud para un modo dado, sin importar cuánto mida la entrada — una cadena de un carácter y un archivo de un megabyte producen el mismo resumen hexadecimal de 32 caracteres.
Ejemplo básico
Aquí $string contiene algún texto y md5() devuelve su resumen hexadecimal. La salida es la cadena hexadecimal de 32 caracteres:
ed076287532e86365e841e92bfc50d8cLa misma entrada siempre produce el mismo resumen, por lo que MD5 es determinista — útil para comparar o indexar datos, pero también significa que un atacante puede precalcular los hashes de valores comunes.
Salida binaria sin procesar
<?php
$hash = md5("Hello World!", true);
echo bin2hex($hash);
?>Cuando $raw_output es true, md5() devuelve el hash binario sin procesar de 16 bytes en lugar de hexadecimal. Eso representa la mitad del tamaño de la forma hexadecimal, lo cual es conveniente cuando se almacena el resumen en una columna de base de datos BINARY(16). Aquí lo pasamos por bin2hex() para imprimirlo, por lo que la salida es idéntica al modo predeterminado:
ed076287532e86365e841e92bfc50d8cCuándo usar MD5 (y cuándo no)
MD5 es rápido pero criptográficamente roto — las colisiones (dos entradas diferentes con el mismo hash) pueden producirse deliberadamente. Elige según el caso de uso:
- Apropiado: sumas de verificación rápidas no relacionadas con seguridad, claves de caché, deduplicación de archivos o compatibilidad con un sistema legado que ya almacena resúmenes MD5.
- No apropiado: almacenamiento de contraseñas y firmas digitales. Usa
password_hash()para contraseñas, yhash('sha256', ...)o algo más robusto para integridad que un atacante podría comprometer.
<?php
// Bad — never store passwords like this:
$bad = md5($password);
// Good — purpose-built, salted, slow on purpose:
$good = password_hash($password, PASSWORD_DEFAULT);Advertencia: No uses
md5()para el almacenamiento de contraseñas ni para firmas digitales. Solo es apropiado para sumas de verificación sin implicaciones de seguridad o compatibilidad con sistemas legados.
Funciones relacionadas
sha1()— produce un hash más largo de 160 bits; tampoco es resistente a colisiones.crc32()— una suma de verificación rápida de 32 bits para detección de errores, no para hasheo.bin2hex()— convierte la salida binaria sin procesar demd5(..., true)en una cadena hexadecimal legible.