Solución de problemas · Desarrolladores
Tu hash no coincide: qué está pasando
Calculas el hash SHA-256 de un archivo descargado y no coincide con el publicado. O el mismo archivo da hashes distintos en dos equipos. La primera reacción es pensar en corrupción o manipulación, pero la explicación suele ser mucho más mundana.
Un hash es extremadamente sensible: un solo byte distinto —un salto de línea, un espacio, la codificación— produce un hash completamente diferente. La pregunta correcta no es «¿cuál está mal?» sino «¿qué byte es distinto?». Veamos las causas en orden de probabilidad.
Causa 1: hasheas cosas distintas sin darte cuenta
El error más frecuente: comparas el hash del archivo descargado con el del contenido copiado al portapapeles, o hasheas el ZIP en un equipo y el contenido descomprimido en otro. Son objetos distintos y sus hashes deben ser distintos.
Cómo detectarlo: verifica qué objeto exacto se hasheó en cada caso. Alinea los dos lados del experimento antes de sospechar del contenido.
Compara equivalentes con equivalentes: si la web publica el hash del ZIP, hashea el ZIP, no la carpeta extraída. Y documenta siempre qué se hasheó: «SHA-256 de programa-v2.3.zip», no «el hash del programa».
Causa 2: saltos de línea distintos (CRLF vs LF)
Windows usa CRLF y Linux/macOS usan LF. Un texto idéntico a la vista tiene bytes distintos según el sistema, y hashes distintos. Clásico al comparar entre plataformas o tras pasar por Git mal configurado.
Cómo detectarlo: los archivos «parecen» iguales pero los hashes difieren; el hexadecimal revela los \r extra.
Normaliza los saltos de línea antes de hashear (todo a LF) en ambos lados y recalcula. En Git, el atributo text=auto en .gitattributes evita este problema. Define una convención en tu equipo y publícala junto al hash.
Causa 3: codificación con o sin BOM
Un UTF-8 con BOM lleva tres bytes invisibles al inicio que el UTF-8 sin BOM no tiene. Tres bytes bastan para cambiar el hash por completo con contenido visible idéntico.
Cómo detectarlo: el archivo se ve igual; en hexadecimal, uno empieza con EF BB BF y el otro no.
Guarda ambas versiones como UTF-8 sin BOM (el estándar para intercambio) y recalcula. Configura tu editor para usarlo por defecto.
Causa 4: formato y espacios en JSON o XML
Dos JSON con el mismo contenido pero distinto formato (espacios, indentación, orden de claves) son bytes distintos y hashes distintos. Típico al verificar respuestas de APIs o configuraciones generadas por herramientas diferentes.
Cómo detectarlo: «dicen lo mismo» pero el diff muestra diferencias de espacios u orden. El contenido semántico coincide; la representación, no.
Normaliza antes de hashear: pasa ambos por el mismo formateador. La herramienta de minificar JSON de Tótem (usatotem.com/herramientas-desarrollador/minificar-json/) es perfecta: minifica ambas versiones y compara los hashes de los resultados. Si coinciden, solo difería el formato.
Causa 5: mayúsculas y algoritmos confundidos
A veces el «desajuste» es ilusorio: un hash en mayúsculas y otro en minúsculas son el mismo hash en hexadecimal. Y un MD5 nunca coincidirá con un SHA-256 aunque el archivo sea idéntico.
Cómo detectarlo: distinta longitud = algoritmos distintos (MD5: 32 caracteres; SHA-1: 40; SHA-256: 64). Misma longitud pero distinto caso = normaliza a minúsculas.
Publica siempre el hash indicando el algoritmo («SHA-256: ...») y en minúsculas, la convención más extendida.
Protocolo de diagnóstico en orden
Uno: confirma que hasheas el mismo objeto en ambos lados. Dos: confirma el algoritmo y normaliza a minúsculas; si coinciden, era falsa alarma.
Tres: en archivos de texto, normaliza saltos de línea y codificación (UTF-8 sin BOM, LF) y recalcula. Cuatro: en documentos estructurados como JSON, normalízalos con usatotem.com/herramientas-desarrollador/minificar-json/ antes de comparar.
Cinco: solo si tras normalizarlo todo siguen difiriendo, considera corrupción o manipulación y descarga de nuevo desde la fuente oficial.
Herramientas gratuitas mencionadas
Minificar JSON
Elimina espacios y saltos de línea de tu JSON para reducir su tamaño.
Usar gratisFormateador JSON
Pega tu JSON y fórmatalo con la sangría que elijas (2, 4 espacios o tabulador).
Usar gratisValidador JSON
Comprueba si tu texto es un JSON válido y descubre su tipo y estructura.
Usar gratisPreguntas frecuentes
¿Un hash distinto significa que el archivo tiene virus?
Normalmente no: suele ser una causa técnica de esta guía. Pero si tras normalizarlo todo sigue sin coincidir con el publicado por la fuente oficial, no uses ese archivo y descárgalo de nuevo desde el sitio oficial.
¿MD5 sirve para verificar descargas?
Para corrupción accidental sí; para seguridad no: tiene colisiones conocidas y un atacante podría fabricar un archivo malicioso con el mismo MD5. Para verificación seria usa SHA-256.
¿Por qué dos archivos «iguales» pesan distinto?
Por la misma razón que sus hashes difieren: metadatos, codificación, saltos de línea o formato. Si pesan lo mismo pero el hash difiere, el cambio está en el contenido; si pesan distinto, puede ser solo formato.
En resumen
Un hash que no coincide rara vez es un misterio: el objeto equivocado, los saltos de línea, el BOM, el formato o una confusión de algoritmo. Normalizar antes de comparar resuelve la gran mayoría de los casos.
Sigue el protocolo en orden y preocúpate de verdad solo cuando, tras normalizarlo todo, los hashes sigan sin cuadrar.