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.

AlgoritmoBitsHex charsUso recomendado
MD5128 bits32 caracteresChecksums legacy, no para seguridad
SHA-1160 bits40 caracteresGit commit IDs, no para seguridad
SHA-256256 bits64 caracteresContraseñas, firmas digitales, JWTs
SHA-512512 bits128 caracteresMá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.

Web Crypto API — nativo en el navegador
"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.

Módulo crypto nativo de Node.js
"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

Verificar integridad de archivos

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)
Almacenar contraseñas

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)
Generar ETags para caché HTTP

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 →