bitlvl
ES

Calculadora de CRC y sumas de comprobación

Escribe texto, pega bytes en hex o arrastra un archivo y obtén todos los CRC habituales a la vez, cada uno con sus parámetros, para que encuentres la variante que usa un dispositivo o protocolo.

O arrastra un archivo, o

Modelo CRC personalizado

Reflejar

Los resultados y mensajes de esta herramienta se muestran en inglés.

Qué es un CRC

Una comprobación de redundancia cíclica trata el mensaje como un número binario largo y lo divide entre un polinomio fijo; el resto es la suma de comprobación. Si un bit, o una ráfaga de bits más corta que el CRC, se voltea, el resto cambia, y por eso los CRC protegen tramas Ethernet, entradas ZIP, chunks PNG, sectores de disco y protocolos serie. Son rápidos en hardware y software, pero no criptográficos: cualquiera puede fabricar datos con el CRC que quiera.

Por qué hay tantos «CRC-16»

Dos implementaciones de la misma anchura pueden diferir en cinco parámetros, y cada combinación es una suma de comprobación distinta:

ParámetroSignificado
PolinomioEl divisor, escrito sin su bit superior (0x1021 para CCITT, 0x04C11DB7 para CRC-32).
InitEl valor inicial del registro, 0 o todo unos.
Reflejar entradaSi cada byte de entrada se procesa empezando por el bit menos significativo (sí en CRC-32, MODBUS; no en CCITT-FALSE, XMODEM).
Reflejar salidaSi el registro final se invierte bit a bit.
XOR outUn XOR final, normalmente 0 o todo unos.

La forma estándar de identificar una variante es su valor de comprobación: el CRC de la cadena ASCII 123456789. La tabla de arriba lo muestra para cada modelo, y la entrada por defecto es exactamente esa cadena; si un dispositivo te da una suma de comprobación para datos conocidos, puedes compararla con todas las variantes a la vez.

Variantes habituales

  • CRC-32 (0x04C11DB7, reflejado): Ethernet, ZIP, gzip, PNG, zlib.crc32, cksum -o 3.
  • CRC-32C (Castagnoli): iSCSI, SCTP, metadatos de ext4, Btrfs, LevelDB; tiene una instrucción de hardware en x86 y ARM y por eso es la opción rápida para diseños nuevos.
  • CRC-16/MODBUS: Modbus RTU sobre serie; CRC-16/CCITT-FALSE: Bluetooth, muchas menciones de «CRC-CCITT»; CRC-16/XMODEM: XMODEM, binascii.crc_hqx de Python.
  • Adler-32: flujos zlib; más rápido que CRC pero más débil con entradas cortas.

Preguntas

¿Un CRC es lo mismo que un hash?

No. Un CRC detecta corrupción accidental y es trivial de invertir o falsificar. Para integridad frente a un atacante o para identificar archivos usa SHA-256. Para velocidad en un canal de confianza, CRC está bien.

Mi dispositivo da un CRC-16 distinto del de esta página.

Hay al menos una docena de variantes de CRC-16. Introduce los datos que comprobó el dispositivo y compara su valor con cada fila de la tabla; la fila que coincida te dice el polinomio, el init y la reflexión del dispositivo. Si ninguna coincide, prueba el modelo personalizado y comprueba si el dispositivo incluye un byte de longitud o una dirección en los datos.

¿Qué orden de bytes tiene el resultado?

El CRC se muestra como un número. Cuando se escribe en un paquete, el protocolo decide el orden: MODBUS envía primero el byte bajo, XMODEM el alto. Consulta la especificación o una trama de ejemplo.

¿Qué es CRC-32C y por qué lo usan las bases de datos?

CRC-32 con el polinomio de Castagnoli, que detecta mejor los errores en los tamaños de bloque de los sistemas de almacenamiento y está implementado como una sola instrucción de CPU (SSE4.2 crc32, ARMv8 CRC32C), lo que lo hace varias veces más rápido que el CRC-32 clásico.

¿Puedo calcular un CRC de forma incremental?

Sí. Todos estos CRC pueden continuarse desde un valor anterior, así funciona zlib.crc32(data, previous). Esta página calcula toda la entrada de una vez.