Pide tu presupuesto ya!

Certutil -hashfile: cómo calcular el hash de un archivo en Windows

Certutil -hashfile: cómo calcular el hash de un archivo en Windows

Has descargado una imagen ISO, un instalador o una copia de seguridad y la web de origen publica una cadena larga de letras y números junto al enlace: el hash o suma de verificación. Calcularlo en tu equipo y compararlo con el publicado es la forma estándar de comprobar que el archivo no se corrompió durante la descarga y, si el hash viene de una fuente de confianza, que no ha sido modificado. En Windows no hace falta instalar nada: la herramienta certutil con la opción -hashfile lo calcula desde el símbolo del sistema.

Esta guía te explica cómo se usa, qué algoritmos admite, cómo comparar el resultado sin equivocarte, qué limitaciones tiene la comprobación y cuándo es mejor usar la alternativa de PowerShell. Si buscas el resto de funciones de la herramienta (consultar y gestionar certificados), están en nuestra guía de Certutil para la gestión de certificados.

Qué hace certutil -hashfile

Según la documentación de Microsoft, la opción -hashfile «genera y muestra un hash criptográfico de un archivo». La sintaxis es:

certutil [opciones] -hashfile ArchivoEntrada [AlgoritmoHash]

Un hash es una huella de tamaño fijo calculada a partir del contenido del archivo. Si cambias un solo bit del archivo, el hash resultante es completamente distinto. Por eso sirve para detectar cualquier alteración: descarga interrumpida, error de disco o modificación malintencionada.

Por qué un hash sirve para comprobar archivos

Las funciones hash tienen tres propiedades que explican su utilidad. Son deterministas: el mismo archivo da siempre el mismo hash, en cualquier equipo. Tienen tamaño fijo: un archivo de 10 KB y uno de 10 GB producen un hash de la misma longitud. Y presentan el llamado efecto avalancha: un cambio mínimo en el archivo altera por completo el resultado. Una cuarta propiedad es la que separa los algoritmos modernos de los antiguos: la resistencia a las colisiones, es decir, que sea inviable fabricar dos archivos distintos con el mismo hash. En MD5 y SHA1 se han demostrado colisiones prácticas, por eso no se recomiendan cuando alguien podría querer manipular el archivo a propósito; para detectar un simple error de descarga siguen sirviendo.

Cuándo es útil en la práctica

  • Imágenes ISO de sistemas operativos. Las distribuciones de Linux y muchos fabricantes publican el SHA256 de cada ISO. Verificarlo antes de grabar el USB evita instalaciones corruptas.
  • Copias de seguridad. Calcula el hash del archivo original y del copiado: si coinciden, la copia es idéntica.
  • Transferencias grandes. Al mover archivos entre servidores o por una red inestable, comparar hashes confirma que llegaron completos.
  • Detectar archivos duplicados. Dos archivos con el mismo hash son, a efectos prácticos, el mismo contenido aunque tengan nombres distintos.
  • Entregar archivos a un cliente o compañero. Adjuntar el SHA256 junto al archivo permite que la otra parte compruebe que lo recibió sin alteraciones.

Cómo calcular el hash de un archivo, paso a paso

  1. Abre el Símbolo del sistema (no hace falta ser administrador).
  2. Escribe el comando con la ruta del archivo. Si la ruta tiene espacios, ponla entre comillas.
  3. Indica el algoritmo al final. Si lo omites, certutil usa SHA1.
certutil -hashfile "C:\Users\Ana\Downloads\ubuntu.iso" SHA256

La salida tiene este aspecto (el texto exacto cambia según el idioma de Windows y el valor del hash, claro, es el de tu archivo):

SHA256 hash of C:\Users\Ana\Downloads\ubuntu.iso:
3f4c1b8e0a5d... (64 caracteres hexadecimales)
CertUtil: -hashfile command completed successfully.

La línea intermedia es el hash. Los archivos grandes tardan unos segundos o minutos en procesarse, porque el programa tiene que leer el archivo entero; no es un cuelgue.

Algoritmos disponibles

AlgoritmoLongitud del hashCuándo usarlo
MD532 caracteres hexSolo para detectar corrupción accidental o si es el único que publica el proveedor. No es seguro frente a manipulación intencionada.
SHA140 caracteres hexIgual que MD5: aceptable para errores de descarga, no frente a ataques. Es el valor por defecto de certutil.
SHA25664 caracteres hexLa opción recomendada hoy para verificar descargas.
SHA384 / SHA51296 / 128 caracteres hexCuando el proveedor publica ese algoritmo.

Certutil también admite MD2 y MD4, pero están obsoletos y no hay motivo para usarlos. La regla práctica: calcula el mismo algoritmo que publica el proveedor. Si publica SHA256, usa SHA256; comparar un MD5 con un SHA256 no tiene sentido porque son valores distintos por diseño.

Cómo comparar el hash con el publicado

La comparación debe ser exacta, carácter a carácter. Dos consejos para no equivocarte:

  • Las letras del hash pueden aparecer en mayúsculas o minúsculas; son equivalentes. Si ves una diferencia solo de mayúsculas, el hash coincide.
  • No compares «a ojo» los 64 caracteres. Pega ambas cadenas en un editor de texto una debajo de la otra, o usa un comando.

En PowerShell puedes automatizar la comparación. Esta versión ejecuta certutil, toma la línea del hash y la compara con el valor esperado, ignorando espacios y mayúsculas:

$esperado = "PEGA_AQUI_EL_HASH_PUBLICADO"
$calculado = (certutil -hashfile "C:\Users\Ana\Downloads\ubuntu.iso" SHA256)[1] -replace '\s', ''
if ($calculado -ieq $esperado) { "Coincide" } else { "NO coincide" }

El índice [1] toma la segunda línea de la salida, que es la que contiene el hash. Si tu versión de Windows muestra el resultado con otra estructura, ajusta el índice.

La alternativa en PowerShell: Get-FileHash

Desde PowerShell 4.0 existe un cmdlet específico, Get-FileHash, que devuelve el hash como objeto y es más cómodo para scripts:

Get-FileHash "C:\Users\Ana\Downloads\ubuntu.iso" -Algorithm SHA256

Calcula SHA256 por defecto y admite SHA1, SHA384, SHA512 y MD5, entre otros. La ventaja frente a certutil es que no tienes que analizar texto: puedes comparar directamente la propiedad Hash. Certutil sigue siendo útil en equipos donde solo dispones del símbolo del sistema, en scripts .bat antiguos y en sistemas donde PowerShell está restringido.

NecesidadHerramienta
Una comprobación rápida desde cmdcertutil -hashfile archivo SHA256
Un script en PowerShellGet-FileHash archivo -Algorithm SHA256
Verificar muchos archivos de una carpetaUn bucle con cualquiera de los dos
Equipo Linux o macOSsha256sum archivo o shasum -a 256 archivo

Verificar varios archivos de una carpeta

En un archivo por lotes o directamente en el símbolo del sistema puedes recorrer una carpeta. En la consola se escribe un solo signo de porcentaje; dentro de un archivo .bat se duplica:

for %f in (*.iso) do certutil -hashfile "%f" SHA256

En PowerShell, con salida en forma de tabla:

Get-ChildItem *.iso | Get-FileHash -Algorithm SHA256 | Select-Object Hash, Path

Qué demuestra y qué no demuestra un hash

Aquí está el error de concepto más extendido. Que el hash coincida solo prueba que tu archivo es idéntico al que tiene la persona que publicó ese hash. No prueba que el archivo sea seguro. Y si el hash está en la misma página que el enlace de descarga, un atacante que haya comprometido la web puede haber cambiado ambos a la vez. Para que la comprobación aporte seguridad real:

  • Obtén el hash de una fuente independiente del archivo (por ejemplo, la página oficial del proyecto por HTTPS, no un espejo ni un foro).
  • Siempre que el proveedor lo ofrezca, verifica también la firma digital del archivo o del fichero de sumas: es una prueba mucho más fuerte que un hash suelto. En Windows puedes ver la firma de un ejecutable en Propiedades, pestaña Firmas digitales.
  • Desconfía si el hash no coincide y vuelve a descargar desde la fuente oficial antes de abrir el archivo.

Errores frecuentes

  • «El sistema no puede encontrar el archivo especificado». Ruta mal escrita o sin comillas. Arrastra el archivo a la ventana del símbolo del sistema para que escriba la ruta correcta.
  • El hash no coincide. Comprueba que usas el mismo algoritmo y que no estás comparando el hash del archivo comprimido con el del descomprimido. Si todo es correcto, descarga de nuevo.
  • Salida con espacios entre pares de caracteres. Algunas versiones antiguas de Windows mostraban el hash separado en pares. Quita los espacios antes de comparar.
  • Calcular el hash de un texto, no de un archivo. -hashfile trabaja con archivos. Para un texto, guárdalo primero en un archivo (con cuidado con los saltos de línea finales, que cambian el hash).
  • El archivo está en uso. Si el programa que lo descarga o usa lo mantiene bloqueado, espera a que termine.

Otros usos de certutil que te pueden interesar

Certutil es mucho más que un calculador de hashes: gestiona certificados, almacenes de certificados y listas de revocación. Si trabajas con certificados SSL de tu web, te vendrá bien saber convertir formatos; lo explicamos en la guía de conversión de certificados CRT a PEM. Y si buscas más guías técnicas de administración de sistemas, tienes el resto en el blog.

Resumen

  • certutil -hashfile archivo SHA256 calcula el hash de un archivo en Windows sin instalar nada.
  • Usa el mismo algoritmo que publica el proveedor; SHA256 es la opción recomendada. Por defecto certutil usa SHA1.
  • Compara los hashes exactamente (ignorando mayúsculas y espacios), a poder ser con un comando.
  • Get-FileHash es la alternativa cómoda en PowerShell.
  • Un hash coincidente solo es útil si procede de una fuente independiente; mejor aún si se verifica además la firma digital.

Comprobar que Certutil y PowerShell leen el mismo archivo

Cuando dos resultados parecen distintos, empieza por fijar la ruta y el algoritmo. Dos archivos con el mismo nombre pueden estar en carpetas diferentes, y SHA256 no produce el mismo resultado que SHA1. Este ejemplo utiliza una ruta absoluta almacenada una sola vez y no modifica el archivo.

$archivoVerificado = 'C:\Descargas\instalador.iso'
if (-not (Test-Path -LiteralPath $archivoVerificado -PathType Leaf)) {
    throw 'El archivo indicado no existe'
}
certutil -hashfile $archivoVerificado SHA256
Get-FileHash -LiteralPath $archivoVerificado -Algorithm SHA256 |
    Select-Object Algorithm, Hash, Path

Sustituye la ruta por la del archivo que quieres comprobar. Compara únicamente la cadena hexadecimal del hash, sin las etiquetas de salida de Certutil. Las letras mayúsculas o minúsculas no cambian su valor hexadecimal. Si el archivo cambia entre una lectura y otra, repite la comprobación sobre una copia estable.

Como prueba de funcionamiento puedes crear un archivo de texto pequeño en una carpeta de trabajo y ejecutar ambos comandos contra esa misma ruta. Obtener el mismo resultado confirma que has comparado esas lecturas con el mismo algoritmo; no demuestra quién publicó el archivo ni que sea seguro ejecutarlo.

Consulta las referencias de Certutil y Get-FileHash para las opciones admitidas. Para verificar una descarga, consigue además el valor esperado desde una fuente del distribuidor que puedas autenticar.

Written by