Calculadora de checksum Adler-32 y Fletcher
Escribe un texto o pega bytes en hex para obtener a la vez tres sumas de verificación clásicas basadas en sumas: Adler-32, la que zlib guarda al final de cada flujo comprimido, y las dos de Fletcher de las que procede.
Funciona en tu navegador: nada de lo que escribes se envía a ningún sitio.
Cómo se usa
- Escribe o pega la entrada. El texto se lee como UTF-8, así que las letras con tilde y la ñ ocupan dos bytes.
- Cambia a «Bytes en hex» para comprobar datos en bruto, por ejemplo
78 9c o 0x01,0x02; se ignoran espacios, comas y 0x.
- Copia el valor en hex. El número decimal de al lado es la misma suma.
Cómo funciona
- 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: sum1 = suma de los bytes, sum2 = suma de los sum1 sucesivos, ambos módulo 255; resultado sum2·256 + sum1.
- Fletcher-32: lo mismo con palabras de 16 bits little-endian, módulo 65535; resultado sum2·65536 + sum1.
Ejemplo
La palabra Wikipedia (9 bytes):
- Adler-32: los bytes suman 919, así que A = 1 + 919 = 920 = 0x0398; B = 4582 = 0x11E6. Resultado
11E60398, en decimal 300286872.
- Fletcher-16:
EE9A.
- Fletcher-32:
B7DDA1F8.
La cadena de prueba abcde da Fletcher-16 C8F0 y Fletcher-32 F04FC729.
Consejos
- Compruébalo en Python:
zlib.adler32(b"Wikipedia") devuelve 300286872.
- El Adler-32 de una entrada vacía es
00000001, porque A empieza en 1.
- Con mensajes cortos Adler-32 es débil: A y B no llegan a dar la vuelta al módulo y muchas combinaciones de bits quedan sin usar. CRC-32 detecta mejor los errores.
Preguntas frecuentes
¿Cómo se calcula Adler-32?
Recorren los bytes dos sumas: A empieza en 1 y suma cada byte, B suma el valor actual de A tras cada byte. Ambas se toman módulo 65521, el mayor primo menor que 65536. La suma de verificación es B × 65536 + A.
¿Dónde se usa Adler-32?
En el formato zlib (RFC 1950): son los 4 bytes finales de cada flujo zlib, así que la llevan los datos de las imágenes PNG y muchos archivos comprimidos. rsync usa una suma móvil parecida para encontrar bloques iguales.
¿En qué se diferencian Fletcher-16 y Fletcher-32?
Fletcher-16 suma bytes módulo 255 y da 16 bits. Fletcher-32 suma palabras de 16 bits módulo 65535 y da 32 bits. Adler-32 es Fletcher-32 adaptado a bytes, con un módulo primo y un valor inicial de 1.
¿Cómo se agrupan los bytes en palabras para Fletcher-32?
En little-endian: el primer byte es la mitad baja de la palabra y el segundo la alta; un último byte impar se completa con un cero. Así lee los datos el código C habitual en x86 y así salen los valores publicados, como F04FC729 para abcde. Otras implementaciones pueden agrupar al revés.
¿Un checksum detecta manipulaciones?
No. Estas sumas detectan errores accidentales, como bytes dañados, pero cualquiera puede cambiar los datos y recalcularlas. Contra cambios deliberados usa un hash criptográfico o un HMAC.