Calculadora CRC

Calcule CRC-8/CCITT, CRC-16/CCITT-FALSE, CRC-16/MODBUS, CRC-32/ISO-HDLC (la de zlib/PNG/gzip), CRC-32C, CRC-32/BZIP2, CRC-32/MPEG-2, CRC-32/POSIX, cksum, CRC-64/XZ, CRC-64/ECMA-182, CRC-64/GO-ISO, CRC-64/REDIS o Adler-32 sobre texto, bytes hexadecimales o archivos completos — varios conjuntos de parámetros a la vez, con los parámetros exactos (polinomio, init, refin, refout, xorout) impresos junto a cada valor para que una discrepancia nunca sea un misterio. Para resúmenes criptográficos (MD5/SHA-2/SHA-3/BLAKE2) consulte el Generador de hash.
Se ejecuta de forma totalmente local: no se sube nada. Archivos de hasta 200 MB.
Entrada: Salida:
Algoritmos:
Las líneas usan la forma «ALGORITMO  valor» seguida de una línea de parámetros con sangría, así que un resultado copiado y pegado siempre indica qué conjunto de parámetros lo produjo.
¿Qué CRC necesita?
Si una especificación dice simplemente «CRC-32», casi siempre se refiere a CRC-32/ISO-HDLC: el que está dentro de zlib, gzip, PNG, ZIP y Ethernet. CRC-32C (Castagnoli) es el acelerado por hardware de las CPU modernas, usado por iSCSI, ext4, btrfs y ZFS. cksum coincide con el comando POSIX cksum (añade la longitud del archivo antes de dividir). CRC-16/MODBUS es la suma de comprobación de las tramas RTU de los dispositivos Modbus; CRC-16/CCITT-FALSE es común en tarjetas inteligentes. CRC-64/XZ aparece en archivos .xz; el clúster de Redis usa CRC-64/REDIS para los slots de hash. Adler-32 es la alternativa rápida de zlib a CRC-32. Si dos herramientas no coinciden, compare sus filas de poly/init/xorout: el conjunto de parámetros, no el nombre, define el resultado.
Autocomprobación
Ejecuta los motores de la página contra los valores de comprobación publicados («123456789») para los 14 conjuntos de parámetros, además de las comprobaciones de análisis hexadecimal y de representación decimal/octal. No se envía nada a ningún sitio.
CRC: comprobación de redundancia cíclica, explicada desde cero
En una frase: un CRC trata sus datos como un número binario gigantesco, lo divide entre un número «generador» fijo usando XOR en lugar de resta, e informa del resto: una huella compacta que cambia de forma drástica cuando se invierte un solo bit de la entrada, por eso todo, desde los archivos PNG hasta los cables Modbus, lo lleva.
Qué es realmente un CRC

La imagen de la división. Alinee sus bytes como un único número binario largo. Elija un divisor, el polinomio, p. ej. 0x04C11DB7 para CRC-32. Realice la división binaria larga donde la «resta» es la operación XOR: siempre que el bit inicial del resto en curso sea 1, aplique XOR con el divisor, desplace a la izquierda y repita. Cuando todo el mensaje ha pasado, lo que quede en el registro es el CRC. Sin claves, sin tablas en la definición: solo una división con resto.

Los cinco parámetros. Dos sistemas pueden decir ambos «CRC-32» y aun así no coincidir, porque el nombre por sí solo no fija nada. La receta completa necesita cinco valores: poly (el divisor), init (con qué empieza el registro: todos ceros hace que desaparezcan los bytes cero iniciales; todos unos no), refin/refout (si cada byte de entrada, y el registro final, se invierte bit a bit, herencia del hardware serie que enviaba los bits del menos significativo al más significativo), y xorout (una máscara XOR final para que una serie de ceros al final también cambie el resultado). Esta página imprime los cinco junto a cada resultado precisamente por eso.

Por qué detecta errores. Un divisor bien elegido hace que el resto de un mensaje y el resto del mismo mensaje con unos pocos bits invertidos difieran con una probabilidad abrumadora: un buen CRC-32 detecta todos los errores de 1 y 2 bits, todos los números impares de errores de bit y cada ráfaga de hasta 32 bits consecutivos corruptos, garantizado, no probabilísticamente. Esa garantía se refiere a la corrupción accidental, y es lo que hace de los CRC la herramienta adecuada para cables ruidosos y discos defectuosos.

Lo que un CRC no es

No es un hash criptográfico. No hay secreto ni unidireccionalidad: cualquiera que conozca los parámetros puede falsificar un mensaje con el CRC que quiera, en milisegundos, añadiendo cuatro bytes de corrección. Un CRC detecta accidentes, nunca adversarios. Para descargas que verifica contra desconocidos, las firmas importan: consulte el Generador de hash (MD5/SHA/BLAKE2) en su lugar. Esa página también explica por qué MD5 y SHA-1 están retirados en entornos hostiles mientras SHA-256 sigue vigente.

No es un código de corrección de errores. Un CRC le dice que algo cambió, no qué cambió. Reparar errores al vuelo es tarea de códigos como Reed–Solomon o Hamming, que almacenan deliberadamente una estructura redundante que un decodificador puede invertir.

No es compresión ni cifrado. El resto ocupa unos pocos bytes independientemente del tamaño de la entrada, y a partir de él no se puede recuperar la entrada; pero, a diferencia de un hash criptográfico, eso se debe simplemente a que se descartó información, no a que invertirlo sea difícil.

Las familias de esta página

Los cuatrillizos CRC-32. Cuatro de las entradas de esta página comparten el polinomio 0x04C11DB7 y aun así producen valores distintos: ISO-HDLC (reflejado, init/xorout todos unos) es «el» CRC-32 de zlib, gzip, PNG y ZIP; BZIP2 es la misma matemática sin reflejar; MPEG-2 es BZIP2 sin XOR final; POSIX parte de cero y es la base del comando cksum (que además añade la longitud del archivo a la división, así que cksum de un archivo y CRC-32/POSIX de los mismos bytes difieren). CRC-32C (Castagnoli, polinomio 0x1EDC6F41) es el quinto hermano: otro polinomio elegido para un mejor rendimiento en la detección de errores, y el que las CPU x86 y ARM modernas pueden calcular a velocidad de memoria con una sola instrucción.

El cuarteto CRC-64. XZ usa el polinomio ECMA-182 en forma reflejada con init y xorout todos unos; ECMA-182 en sí es el original sin reflejar y con init cero del estándar de cinta DLT-1; GO-ISO es crc64.ISO de Go, un polinomio pequeño 0x1B, todavía reflejado; REDIS usa un polinomio elegido por su buena difusión en la asignación de slots de hash. Sesenta y cuatro bits es el tamaño en el que los CRC empiezan a usarse como funciones hash (para agrupar en cubos) en lugar de como simples sumas de comprobación.

Adler-32 es el outsider: no es una división en absoluto. Suma los bytes (A, empezando en 1) y suma esas sumas (B), ambas módulo 65521, y concatena las dos sumas de 16 bits. Es más rápido que CRC-32 en software, y zlib lo usa para flujos deflate; pero para entradas cortas (menos de unos cientos de bytes) la suma lleva muy poca información, y por eso zlib vuelve a CRC-32 en bloques pequeños.

CRC-8 y CRC-16 sobreviven donde los bytes son caros: CRC-8/CCITT (polinomio 0x07) protege bytes de cabecera individuales en SMBus y en protocolos de radio celular; CRC-16/CCITT-FALSE protege bloques de tarjetas inteligentes; CRC-16/MODBUS es la suma de comprobación de cada trama Modbus RTU en las fábricas de todo el mundo.

Dónde se usa cada uno
Conjunto de parámetrosDónde aparece
CRC-32/ISO-HDLCzlib, gzip, PNG, ZIP, Ethernet (FCS), muchos formatos de archivo
CRC-32CiSCSI, ext4, btrfs, ZFS, instrucción CRC32C por hardware de SSE4.2/ARMv8
CRC-32/BZIP2flujo de archivo .bz2
CRC-32/MPEG-2flujos de transporte MPEG-2
CRC-32/POSIX & cksumsalida del comando POSIX cksum (cksum archivo.txt)
CRC-16/MODBUStramas Modbus RTU (PLC industriales, contadores, inversores)
CRC-16/CCITT-FALSEtarjetas inteligentes, enlaces afines a X.25, algunos protocolos GPS
CRC-8/CCITTSMBus (byte PEC), cabeceras de radio celular
CRC-64/XZcomprobaciones de integridad del contenedor .xz
CRC-64/ECMA-182ECMA-182 / estándar de cinta DLT-1
CRC-64/GO-ISObiblioteca estándar de Go crc64.ISO
CRC-64/REDISasignación de slots de hash del clúster de Redis
Adler-32flujos zlib (deflate), otros contextos de suma de comprobación rápida
La tabla de anclas: check(“123456789”)

La convención del catálogo de CRC es publicar el resultado de la cadena ASCII 123456789 (9 bytes). Cada valor de abajo puede reproducirse en esta página: escriba 123456789 en el cuadro de texto, marque el algoritmo y pulse Calcular.

Conjunto de parámetrosAnchoValor de comprobación (hex)
CRC-8/CCITT80xf4
CRC-16/CCITT-FALSE160x29b1
CRC-16/MODBUS160x4b37
CRC-32/ISO-HDLC320xcbf43926
CRC-32C320xe3069283
CRC-32/BZIP2320xfc891918
CRC-32/MPEG-2320x0376e6e7
CRC-32/POSIX320x765e7680
cksum (POSIX command)320x377a6011
CRC-64/XZ640x995dc9bbdf1939fa
CRC-64/ECMA-182640x6c40df5f0b497347
CRC-64/GO-ISO640xb90956c775a41001
CRC-64/REDIS640xe9c6d914c4b8d9ca
Adler-32320x091e01de

Fuentes: cada valor se contrastó con una implementación bit a bit de referencia independiente y, cuando existe, con la biblioteca del sistema que incluye el algoritmo (zlib para CRC-32 y Adler-32; el catálogo de CRC de Greg Cook para el resto).

Errores habituales
  • «CRC-32» sin parámetros. Entre ISO-HDLC, BZIP2, MPEG-2, POSIX y CRC-32C, circulan cinco valores distintos con el mismo nombre. Registre siempre polinomio/init/refin/refout/xorout junto con el resultado: esta página los imprime por usted.
  • Comparar el CRC-32 de un archivo con la salida de cksum. Algoritmos distintos: cksum añade la longitud y usa otro init. Los números no coincidirán, y ambos son «correctos».
  • Confiar en el CRC frente a la manipulación. Falsificar un CRC coincidente es un ejercicio de manual (parchear los últimos 4 bytes). Use un MAC con clave (HMAC) o una firma cuando la otra parte pueda ser hostil.
  • Esperar efecto avalancha. Un CRC es lineal: mensajes relacionados dan CRC relacionados. Bien para el ruido, incorrecto para hash: si necesita agrupar en cubos, CRC-64 o un hash real es más seguro que CRC-32.
  • Texto hexadecimal frente a bytes. La cadena "123456789" (9 bytes ASCII, 31 32 33 34 35 36 37 38 39) y el número 0x123456789 son entradas distintas con CRC distintos. Use la pestaña de bytes hexadecimales cuando sus datos de origen sean realmente binarios.
Preguntas frecuentes

¿Por qué mi CRC-32 no coincide con el del archivo ZIP? El CRC-32 de ZIP es ISO-HDLC sobre los datos sin comprimir. Asegúrese de haber calculado sobre los mismos bytes (no sobre el flujo comprimido), en el mismo modo (texto o hexadecimal) y con el mismo conjunto de parámetros: la línea de parámetros impresa bajo cada resultado sirve para hacer esa comprobación al instante.

¿Cuál es mejor, CRC-32C o CRC-32? Para la detección de errores accidentales, ambos detectan todas las ráfagas de hasta 32 bits; CRC-32C funciona mejor con algunos patrones de error y es el que tiene instrucciones en la CPU, prácticamente gratis a velocidades de gigabit. La razón por la que sobrevive CRC-32/ISO-HDLC es la compatibilidad: treinta años de archivos lo hablan.

¿Es CRC-64 más fuerte que CRC-32? Detecta ráfagas más largas (hasta 64 bits) y colisiona mucho menos cuando se usa para agrupar en cubos, pero es igual de falsificable: la anchura compra garantías de detección, no seguridad.

¿Se puede invertir un CRC para revelar la entrada? No: infinitas entradas comparten un mismo CRC. Pero, a diferencia de un hash criptográfico, un atacante puede construir una entrada con el CRC que elija, que es el sentido en el que no es unidireccional en absoluto.