Generador de Hash MD5
Genera hash MD5 de cualquier texto
Texto de entrada
Hash MD5
El hash MD5 aparecerá aquí…
¿Qué es el hashing MD5?
MD5 (Message-Digest Algorithm 5) es una función hash criptográfica que produce un resumen fijo de 128 bits (16 bytes) a partir de cualquier entrada, independientemente de su tamaño. Publicada en 1992 por Ronald Rivest como RFC 1321, MD5 fue diseñada como sucesora más rápida de MD4 y se convirtió rápidamente en una de las funciones hash más utilizadas en internet. El algoritmo procesa la entrada en bloques de 512 bits a través de cuatro rondas de 16 operaciones cada una, usando una función no lineal distinta por ronda, para producir una huella hexadecimal de 32 caracteres.
Una función hash es una transformación unidireccional: dado un valor de entrada, puedes calcular el hash de forma inmediata, pero conociendo solo el hash no puedes recuperar la entrada original. Incluso un cambio de un solo bit en la entrada produce un resumen completamente diferente — una propiedad llamada efecto avalancha. MD5 proyecta un espacio de entrada infinito en un espacio de salida fijo de 128 bits, por lo que las colisiones (dos entradas diferentes que producen el mismo hash) están matemáticamente garantizadas, pero una función hash segura hace que encontrarlas sea computacionalmente inviable.
Desde 2004, investigadores han demostrado ataques de colisión prácticos contra MD5, lo que significa que ya no se considera seguro para firmas digitales, certificados ni ningún contexto donde se requiera resistencia a colisiones. Sin embargo, MD5 sigue siendo ampliamente utilizado para propósitos no relacionados con la seguridad: verificar la integridad de archivos tras descargas, generar claves de caché, deduplicar contenido y crear identificadores deterministas a partir de cadenas. Para estas aplicaciones, la velocidad del algoritmo y el soporte ubicuo de bibliotecas lo convierten en una opción práctica. En 2008, Marc Stevens y colegas publicaron un ataque de colisión de prefijo elegido, lo que significa que un atacante puede construir dos documentos con prefijos elegidos arbitrariamente que comparten el mismo resumen. Esta técnica se demostró en el Chaos Communication Congress de 2008 mediante la construcción de un certificado de Autoridad de Certificación falso. El malware Flame de 2012 posteriormente explotó colisiones de prefijo elegido para falsificar un certificado de firma de código de Microsoft, permitiendo que el malware se disfrazara como una actualización legítima de Windows Update. Estos ataques reales confirmaron que el algoritmo está criptográficamente comprometido para cualquier uso que requiera confianza, y no debe usarse cuando un adversario pueda influir en las entradas que se hashean.
¿Por qué usar este generador de MD5?
Genera hashes MD5 de forma instantánea sin instalar nada ni escribir código. Pega tu texto y obtén el resumen hexadecimal de 32 caracteres en tiempo real.
Casos de uso de MD5
MD5 vs otros algoritmos de hash
MD5 es el más rápido y produce el resumen más corto de los algoritmos de hash comunes, pero ofrece las garantías de seguridad más débiles. La tabla siguiente compara tamaños de resumen, estándares y casos de uso apropiados para cada algoritmo.
| Algoritmo | Tamaño del resumen | Longitud hex | Estándar | Mejor para |
|---|---|---|---|---|
| MD5 | 128 bits | 32 hex chars | 1992 / RFC 1321 | Checksums, non-security fingerprints |
| SHA-1 | 160 bits | 40 hex chars | 1995 / RFC 3174 | Legacy git commits (being replaced) |
| SHA-256 | 256 bits | 64 hex chars | 2001 / FIPS 180-4 | TLS certificates, blockchain, JWTs |
| SHA-384 | 384 bits | 96 hex chars | 2001 / FIPS 180-4 | Government systems, higher security margin |
| SHA-512 | 512 bits | 128 hex chars | 2001 / FIPS 180-4 | Digital signatures, HMAC with large keys |
| SHA-3 | 256 bits | 64 hex chars | 2015 / FIPS 202 | Post-quantum readiness, backup standard |
| BLAKE3 | 256 bits | 64 hex chars | 2020 | High-performance checksums, Merkle trees |
Cómo funciona MD5
MD5 procesa la entrada a través de una construcción Merkle-Damgard: el mensaje se rellena hasta un múltiplo de 512 bits, se divide en bloques y cada bloque pasa por cuatro rondas de 16 operaciones bit a bit que mezclan la entrada con constantes precomputadas derivadas del seno. El resultado es un estado de 128 bits que se convierte en el resumen final.
Cada ronda aplica una función auxiliar no lineal distinta a tres de las cuatro palabras de estado de 32 bits (A, B, C, D). La ronda 1 usa F(B,C,D) = (B AND C) OR (NOT B AND D) — un selector condicional bit a bit. La ronda 2 usa G(B,C,D) = (B AND D) OR (C AND NOT D) — un selector complementario. La ronda 3 usa H(B,C,D) = B XOR C XOR D — una función de paridad. La ronda 4 usa I(B,C,D) = C XOR (B OR NOT D) — un combinador asimétrico. Estas cuatro funciones garantizan que cada bit de la entrada influya en el resumen de salida, produciendo el efecto avalancha que hace que pequeños cambios en la entrada causen variaciones grandes e impredecibles en el hash resultante.
MD5: 5eb63bbbe01eeed093cb22bb8f5acdc3
(128 bits = 16 bytes = 32 hex characters)
El algoritmo procede en cinco etapas: (1) añadir un bit 1, luego ceros, hasta que la longitud del mensaje sea 448 mod 512; (2) añadir la longitud original del mensaje como un entero de 64 bits en little-endian; (3) inicializar cuatro variables de estado de 32 bits (A, B, C, D) con constantes fijas; (4) procesar cada bloque de 512 bits a través de 64 operaciones usando cuatro funciones no lineales (F, G, H, I), una por ronda de 16 operaciones; (5) sumar el estado resultante al total acumulado y emitir el hash final de 128 bits en orden de bytes little-endian.
Ejemplos de código
Cómo generar hashes MD5 en lenguajes y entornos populares. Ten en cuenta que MD5 no está disponible en la Web Crypto API del navegador — usa una biblioteca o Node.js.
// MD5 is not available in Web Crypto API (it only supports SHA-*)
// Use a library like 'js-md5' or the Node.js crypto module
// Node.js (built-in crypto)
const crypto = require('crypto')
const hash = crypto.createHash('md5').update('hello world').digest('hex')
console.log(hash) // → "5eb63bbbe01eeed093cb22bb8f5acdc3"
// With Unicode input
crypto.createHash('md5').update('cafe\u0301').digest('hex')
// → "4fad076bae205e95bec9dacea498e2ab"import hashlib
# Basic MD5 hash
result = hashlib.md5(b'hello world').hexdigest()
print(result) # → "5eb63bbbe01eeed093cb22bb8f5acdc3"
# Hash a string (must encode to bytes first)
text = 'hello world'
hashlib.md5(text.encode('utf-8')).hexdigest()
# → "5eb63bbbe01eeed093cb22bb8f5acdc3"
# Hash a file
with open('file.bin', 'rb') as f:
md5 = hashlib.md5()
for chunk in iter(lambda: f.read(8192), b''):
md5.update(chunk)
print(md5.hexdigest())package main
import (
"crypto/md5"
"fmt"
)
func main() {
data := []byte("hello world")
hash := md5.Sum(data)
fmt.Printf("%x\n", hash)
// → 5eb63bbbe01eeed093cb22bb8f5acdc3
}# Using md5sum (Linux) or md5 (macOS) echo -n "hello world" | md5sum # → 5eb63bbbe01eeed093cb22bb8f5acdc3 - # macOS echo -n "hello world" | md5 # → 5eb63bbbe01eeed093cb22bb8f5acdc3 # Hash a file md5sum package.json # → a1b2c3d4e5f6... package.json # Using openssl (cross-platform) echo -n "hello world" | openssl md5 # → MD5(stdin)= 5eb63bbbe01eeed093cb22bb8f5acdc3