Cómo se usa
- 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.
- Mantén CRC-32 para ZIP, gzip y PNG, o elige CRC-32C para iSCSI, ext4, Btrfs y Google Cloud Storage.
- Elige el Formato de salida: hex (minúsculas), HEX (mayúsculas), Decimal o Base64.
- 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-32 | CRC-32C (Castagnoli) | |
|---|---|---|
| Polinomio | 0x04C11DB7, reflejado 0xEDB88320 | 0x1EDC6F41, reflejado 0x82F63B78 |
Valor de comprobación de 123456789 | cbf43926 | e3069283 |
| Usado por | ZIP, gzip, PNG, Ethernet | iSCSI, SCTP, metadatos de ext4, Btrfs, Google Cloud Storage |
| Aceleración por hardware | Instrucciones CRC32 de ARMv8 | Instrucció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.is | 915d7207 |
你好 | 50a2b841 |
Preguntas frecuentes
¿Cuál es el CRC32 de "123456789"?
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?
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?
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.