Guía de herramienta
Cómo hashear texto
MD5, SHA-1, SHA-256 y SHA-512: qué son, sus diferencias, cuándo usar cada uno e implementación con Web Crypto API y Node.js.
¿Qué es un hash?
Un hash es el resultado de una función unidireccional (one-way function) que convierte cualquier dato de entrada en un string de longitud fija. A diferencia de Base64 o cifrado simétrico, no existe un proceso de "deshasheo": dado el hash, es computacionalmente imposible recuperar el dato original. Son ideales para verificar integridad de datos y almacenar contraseñas de forma segura.
Atención: Los hashes MD5 y SHA-1 están deprecados para uso en seguridad. Son vulnerables a ataques de colisión. Úsalos solo para checksums de archivos o identificadores legacy. Para contraseñas y firmas criptográficas, usa siempre SHA-256 o SHA-512.
Algoritmos disponibles
Cada algoritmo produce un hash de longitud fija, independientemente del tamaño de la entrada.
| Algoritmo | Bits | Hex chars | Uso recomendado |
|---|---|---|---|
| MD5 | 128 bits | 32 caracteres | Checksums legacy, no para seguridad |
| SHA-1 | 160 bits | 40 caracteres | Git commit IDs, no para seguridad |
| SHA-256 | 256 bits | 64 caracteres | Contraseñas, firmas digitales, JWTs |
| SHA-512 | 512 bits | 128 caracteres | Máxima seguridad, archivos críticos |
En el navegador: Web Crypto API
La Web Crypto API está disponible de forma nativa en todos los navegadores modernos. Es asíncrona (retorna una Promise) y soporta SHA-1, SHA-256, SHA-384 y SHA-512. Para MD5 necesitarás una librería externa ya que no está incluido en la especificación.
"color:rgba(255,255,255,0.35)">// Web Crypto API — disponible en todos los navegadores modernos
async function hashTexto(texto, algoritmo = "SHA-256") {
const encoder = new TextEncoder();
const data = encoder.encode(texto);
const hashBuffer = await crypto.subtle.digest(algoritmo, data);
const hashArray = Array.from(new Uint8Array(hashBuffer));
const hashHex = hashArray.map(b => b.toString(16).padStart(2, "0")).join("");
return hashHex;
}
"color:rgba(255,255,255,0.35)">// Ejemplo de uso
const texto = "Hola, MeshiCode!";
const sha256 = await hashTexto(texto, "SHA-256");
console.log(sha256);
"color:rgba(255,255,255,0.35)">// "a7b9c3d1e4f2..." (64 caracteres hex)
const sha512 = await hashTexto(texto, "SHA-512");
console.log(sha512);
"color:rgba(255,255,255,0.35)">// "3f8a2e1b9c7d..." (128 caracteres hex)En Node.js: módulo crypto
Node.js incluye el módulo crypto en su librería estándar. Es síncrono y soporta todos los algoritmos incluyendo MD5.
"color:rgba(255,255,255,0.35)">// Módulo crypto nativo de Node.js (sin dependencias)
const crypto = require("crypto");
function hashTexto(texto, algoritmo = "sha256") {
return crypto.createHash(algoritmo).update(texto, "utf-8").digest("hex");
}
"color:rgba(255,255,255,0.35)">// SHA-256
const sha256 = hashTexto("Hola, MeshiCode!");
console.log(sha256); "color:rgba(255,255,255,0.35)">// "a7b9c3d1e4f2..." (64 chars)
"color:rgba(255,255,255,0.35)">// SHA-512
const sha512 = hashTexto("Hola, MeshiCode!", "sha512");
console.log(sha512); "color:rgba(255,255,255,0.35)">// "3f8a2e1b9c7d..." (128 chars)
"color:rgba(255,255,255,0.35)">// MD5 (solo para checksums, no para seguridad)
const md5 = hashTexto("archivo.zip", "md5");
console.log(md5); "color:rgba(255,255,255,0.35)">// "d41d8cd98f00..." (32 chars)
"color:rgba(255,255,255,0.35)">// SHA-1 (solo para identificadores legacy, como Git)
const sha1 = hashTexto("commit content", "sha1");
console.log(sha1); "color:rgba(255,255,255,0.35)">// "da39a3ee5e6b..." (40 chars)Casos de uso comunes
Calcular el hash SHA-256 de un archivo descargado y compararlo con el hash publicado por el autor.
sha256sum archivo.zip → a3f2b1c9d8... (debe coincidir con el publicado)Nunca guardes contraseñas en texto plano. Guarda el hash SHA-256 (o mejor, usa bcrypt/argon2 con salt).
sha256("miContraseña") → 8d969eef6e... (lo que se guarda en la BD)Un ETag es el hash del contenido de un recurso. Si el contenido cambia, el ETag cambia y el navegador sabe que debe recargar.
ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"Herramienta relacionada
Generador de Hash
Hashea texto en tiempo real con MD5, SHA-1, SHA-256 y SHA-512 directamente en tu navegador. Sin servidores, sin límites.
Abrir generador de Hash →