W3docs

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): string

La función acepta dos parámetros:

  • $str — la cadena de entrada que se va a hashear.
  • $raw_output — boolean opcional. Cuando es false (valor predeterminado), md5() devuelve una cadena hexadecimal de 32 caracteres en minúsculas. Cuando es true, 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

php— editable, runs on the server

Aquí $string contiene algún texto y md5() devuelve su resumen hexadecimal. La salida es la cadena hexadecimal de 32 caracteres:

ed076287532e86365e841e92bfc50d8c

La 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:

ed076287532e86365e841e92bfc50d8c

Cuá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, y hash('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 de md5(..., true) en una cadena hexadecimal legible.

Práctica

Práctica
¿Cuál es la función principal de md5() en PHP?
¿Cuál es la función principal de md5() en PHP?
Was this page helpful?