Informática
Calculadora de checksum CRC32, CRC16 y Adler-32
Escribe un texto o pega bytes en hexadecimal: obtendrás de una vez las sumas de verificación más usadas en redes, archivos y protocolos industriales, en hexadecimal y en decimal, y podrás verificar un valor esperado.
Para qué sirven las checksums
Una checksum es un número corto calculado a partir de los datos que cambia si cambia aunque sea un solo bit. Quien recibe vuelve a calcularla y la compara con la transmitida: si difieren, los datos se han dañado por el camino. El CRC-32 de «123456789» es CBF43926, el valor de control con el que se comprueba una implementación.
Cada algoritmo tiene su contexto. CRC-32 es el de ZIP, PNG y Ethernet; CRC-32C el de iSCSI, ext4 y Btrfs; CRC-16/MODBUS el de los equipos industriales Modbus RTU; CRC-16/CCITT y XMODEM los de protocolos serie y tarjetas; Adler-32 el de la compresión zlib, más rápido pero más débil con datos cortos.
Hay tantas variantes de CRC-16 porque cambian el polinomio, el valor inicial, la reflexión de bits y el XOR final: por eso un mismo mensaje da resultados distintos. Si tienes un valor que verificar y no sabes qué algoritmo se usó, pégalo en el campo del valor esperado y la calculadora busca el que coincide.
Errores frecuentes
- Calcular la checksum del texto en lugar de los bytes: "0A" como texto son dos caracteres, como hexadecimal un solo byte.
- Confundir las variantes de CRC-16: MODBUS, ARC y CCITT dan resultados distintos con los mismos datos.
- Usar un CRC para verificar descargas de fuentes no fiables: se falsifica con facilidad, hace falta SHA-256.
Preguntas frecuentes
¿Por qué el CRC de Modbus parece tener los bytes invertidos?
Modbus transmite el CRC con el byte bajo primero. Si el valor calculado es 4B37, en el mensaje aparecen los bytes 37 4B.
¿Qué diferencia hay entre CRC-32 y CRC-32C?
Usan polinomios distintos: el de Castagnoli (32C) detecta mejor ciertos errores y tiene instrucciones propias en los procesadores modernos, por eso se prefiere en almacenamiento y redes rápidas.
¿Pueden dos archivos distintos tener la misma checksum?
Sí: con 32 bits hay unos 4000 millones de valores, así que las colisiones por azar son posibles con muchos archivos, y construirlas a propósito es trivial.
Cómo funciona este cálculo
CRC: los datos se tratan como un polinomio sobre bits y se dividen por un polinomio generador; el resto es la checksum. Cada variante se define por anchura, polinomio, valor inicial, reflexión de entrada y salida y XOR final (por ejemplo CRC-32: 32 bits, 0x04C11DB7, inicial 0xFFFFFFFF, reflejado, XOR 0xFFFFFFFF). Adler-32: A = 1 + suma de los bytes, B = suma de los valores sucesivos de A, ambos módulo 65521, resultado B·65536 + A. Fletcher-16: igual con módulo 255 y sin el 1 inicial.