Calculadora de suma de verificación CRC32

Calcula la suma de verificación CRC-32 o CRC-32C de un texto, de bytes en hexadecimal o de un archivo completo, muéstrala en hexadecimal, decimal o Base64 y compárala con un valor esperado. Los archivos se leen localmente y nunca se suben.

Todos los algoritmos

Se ejecuta por completo en tu navegador. No se sube nada.

Cómo se usa

  1. Escribe o pega un texto, cambia el Formato de entrada a Hexadecimal para introducir bytes sin procesar o haz clic en Abrir archivo para calcular la suma de verificación de su contenido.
  2. Mantén CRC-32 para ZIP, gzip y PNG, o elige CRC-32C para iSCSI, ext4, Btrfs y Google Cloud Storage.
  3. Elige el Formato de salida: hex (minúsculas), HEX (mayúsculas), Decimal o Base64.
  4. Para comprobar el resultado, pega la suma de verificación esperada en Comparar con, ya sea en hexadecimal sin 0x, en decimal o en Base64.

Qué es una suma de verificación CRC32

Una verificación por redundancia cíclica trata la entrada como un único polinomio binario muy largo, lo divide entre un polinomio generador fijo y se queda con el resto. En CRC-32 el resto tiene 32 bits y suele escribirse como 8 dígitos hexadecimales o como un número sin signo de 0 a 4 294 967 295. Casi cualquier cambio en los datos cambia el resto.

Los CRC están diseñados para los errores que producen los cables, las transmisiones por radio y los discos reales. CRC-32 detecta cualquier ráfaga de bits alterados de hasta 32 bits de longitud, y una alteración aleatoria pasa inadvertida solo en aproximadamente uno de cada 4300 millones de casos. Además, es muy rápido de calcular, y por eso está integrado en ZIP, gzip, PNG y las tramas Ethernet.

CRC-32 y CRC-32C

CRC-32CRC-32C (Castagnoli)
Polinomio0x04C11DB7, reflejado 0xEDB883200x1EDC6F41, reflejado 0x82F63B78
Valor de comprobación de 123456789cbf43926e3069283
Usado porZIP, gzip, PNG, EthernetiSCSI, SCTP, metadatos de ext4, Btrfs, Google Cloud Storage
Aceleración por hardwareInstrucciones CRC32 de ARMv8Instrucción crc32 de x86 SSE4.2, ARMv8

Ambos parten de 0xFFFFFFFF, procesan los bits de cada byte empezando por el menos significativo e invierten el valor final; solo cambia el polinomio, así que los mismos datos dan dos resultados sin relación entre sí. El primero es lo que la mayoría de las herramientas llaman "CRC32" y figura en los catálogos como CRC-32/ISO-HDLC. CRC-32C lo adoptaron más tarde los protocolos de almacenamiento y de red por su mejor detección de errores. Google Cloud Storage informa del CRC-32C, y Amazon S3 de cualquiera de las dos variantes, como Base64 de los cuatro bytes en orden big-endian, que es exactamente lo que muestra la salida Base64.

Una suma de verificación, no un control de seguridad

Un CRC protege contra accidentes, no contra ataques. Es una función lineal, así que cualquiera puede modificar un archivo y después ajustar cuatro bytes para que su CRC-32 no cambie. Por tanto, que el CRC coincida no demuestra nada frente a una manipulación deliberada. Para comprobar una descarga, compara un hash SHA-256 obtenido de una fuente de confianza; para demostrar quién envió un mensaje, usa un HMAC.

Además, 32 bits son demasiado pocos para identificar datos. Con unos 77 000 archivos aleatorios, la probabilidad de que dos compartan el mismo CRC-32 ya alcanza el 50 %, así que no lo uses como identificador único ni como clave de deduplicación. Cuando no hay ningún atacante de por medio, MD5 o SHA-256 son huellas mucho mejores.

CRC32 en código

# Python: zlib.crc32 no tiene signo en Python 3;
# "& 0xffffffff" solo hace falta en Python 2
import zlib
format(zlib.crc32(b'123456789'), '08x')    # 'cbf43926'

// Node.js 20.15+ y 22.2+
require('zlib').crc32('123456789').toString(16).padStart(8, '0')   // 'cbf43926'

// Go (import "hash/crc32")
crc32.ChecksumIEEE(data)                                   // CRC-32
crc32.Checksum(data, crc32.MakeTable(crc32.Castagnoli))    // CRC-32C

// Java: java.util.zip.CRC32 y, desde Java 9, java.util.zip.CRC32C

// PHP
sprintf('%08x', crc32('123456789'));   // 'cbf43926'
hash('crc32b', '123456789');           // 'cbf43926', el mismo CRC-32
hash('crc32c', '123456789');           // 'e3069283'
hash('crc32', '123456789');            // '181989fc', un CRC distinto

Cuidado con los nombres en PHP: el algoritmo de hash llamado crc32 no es la suma de verificación de ZIP, sino el CRC que usa bzip2, impreso en orden de bytes inverso. Usa crc32b o la función crc32() para obtener el mismo resultado que ZIP, gzip y esta herramienta. El comando Unix cksum usa otra variante más, que además incorpora la longitud del archivo, así que su número tampoco coincidirá con ninguno de los dos.

Ejemplos

Entrada (UTF-8)CRC-32
Hello, World!ec4ac3d0
Base64.is915d7207
你好50a2b841

Preguntas frecuentes

¿Cuál es el CRC32 de "123456789"?
Esta cadena es la entrada de prueba estándar para los algoritmos CRC. Su CRC-32 es cbf43926 (3421780262 en decimal) y su CRC-32C es e3069283. Si tu propia implementación devuelve estos valores, usa los mismos parámetros que esta herramienta.
¿Por qué mi CRC32 es distinto del de otra herramienta?
Comprueba cuatro cosas: la variante (CRC-32, CRC-32C, el CRC de bzip2 y el cksum de POSIX dan resultados distintos), los bytes de entrada (finales de línea, un salto de línea final, la codificación de texto), el formato numérico (algunos lenguajes devuelven un entero de 32 bits con signo, lo que vuelve negativos los valores grandes) y el orden de los bytes.
¿Por qué los bytes del CRC aparecen invertidos dentro de mi archivo ZIP o gzip?
ZIP y gzip guardan el CRC-32 en orden de bytes little-endian, así que un editor hexadecimal muestra los cuatro bytes al revés respecto a la notación habitual. PNG lo guarda en big-endian. Esta herramienta, unzip -v y la mayoría de los demás programas muestran primero el byte más significativo.
¿Puedo calcular el CRC32 de un archivo grande?

Sí. Haz clic en Abrir archivo y la suma de verificación se calculará a partir de los bytes del archivo en tu dispositivo, sin subirlo; sirve cualquier archivo que tu navegador pueda cargar en memoria. Después puedes comparar el resultado con el valor de un archivo SFV o del listado de un ZIP.

¿CRC32 es una función hash?

Asigna a datos de cualquier longitud un valor fijo de 32 bits, por lo que a menudo aparece junto a los hashes, pero es una suma de verificación: detecta errores accidentales y no ofrece ninguna protección frente a quien modifique los datos a propósito. Si necesitas una huella más robusta, la tabla Todos los algoritmos, debajo del resultado, muestra MD5 y la familia SHA para la misma entrada.