Calculadora CRC-32 - Checksum de texto, hex y archivos
Calculadora de suma de comprobación CRC-32
Codificado como UTF-8 antes de calcular el hash. 6 bytes
| Longitud del mensaje | 6 bytes |
| CRC-32 | 0xFF55531A |
| CRC-32b (byte cero final) | 0x2F9F43A4 |
CRC-32 detecta la corrupción accidental en archivos zip, flujos gzip, bloques PNG y tramas de Ethernet. No es una función hash criptográfica: es lineal, se falsifica de forma trivial y nunca debe usarse para garantizar la integridad frente a un adversario.
Qué es
Una suma de verificación es un resumen corto y de longitud fija de un mensaje más largo, calculado de modo que cualquier cambio accidental en el mensaje tenga una probabilidad altísima de cambiar también ese resumen. La idea es más antigua que el ordenador personal. IBM fabricaba máquinas tabuladoras que leían tarjetas perforadas, y los operadores descubrieron que los datos que se movían entre máquinas se corrompían de vez en cuando: una columna mal perforada, una tarjeta doblada, un lector gastado. La solución de ingeniería consistía en viajar junto a los datos con un valor aritmético redundante que la máquina receptora recalculaba y comparaba; si coincidían, se asumía que la transferencia estaba intacta, y si no, se pedía una retransmisión. Los descendientes modernos de esa idea son las comprobaciones de redundancia cíclica. Un CRC trata el mensaje como un polinomio sobre GF(2), el campo en el que sumar y restar son la misma operación, la o-exclusiva, y calcula el resto de dividir ese polinomio por un polinomio generador fijo. El CRC-32 usa el generador 0x04C11DB7 y, como la formulación con los bits reflejados es mucho más barata de implementar en hardware y en software que la directa, el código real trabaja con la constante invertida 0xEDB88320.
La implementación habitual precalcula una tabla de 256 entradas y procesa el mensaje byte a byte con una sola consulta y un desplazamiento: crc = tabla[(crc O byte) Y 0xFF] O (crc >> 8). Esa tabla es la razón por la que un megabyte se comprueba en un par de milisegundos, y construirla a partir de la definición en lugar de pegar un array mágico garantiza que el código implementa lo que dice implementar. El registro se inicializa con 0xFFFFFFFF antes del primer byte y el resultado se somete a una O-exclusiva con 0xFFFFFFFF al salir, una técnica llamada aumento. Ninguna de las dos operaciones es decorativa. Con una semilla de cero, los bytes nulos iniciales no alteran el registro, de modo que el mensaje 00 00 41 y el mensaje 41 producen exactamente el mismo valor; inicializar con todo unos obliga a absorber esos bytes, y eso es lo que permite detectar una racha de ceros. La O-exclusiva final garantiza que el mensaje más su propia suma, añadida en orden little-endian, deja el residuo fijo 0x2144DF1C que el receptor comprueba, y es la razón por la que la suma de un mensaje vacío sea el limpio 0x00000000 en lugar de una racha de unos. CRC-32 y CRC-32b son el mismo algoritmo con distinto encuadre: la variante que muestra esta herramienta añade un único byte 0x00 antes de calcular, que es la convención que usan algunos protocolos para distinguir la carga de su terminador, mientras que otras fuentes usan el nombre para la variante BZIP2, que añade cuatro bytes nulos; por eso conviene siempre declarar qué encuadre se está usando.
En la práctica, el CRC-32 es el campo de integridad de cada entrada de un ZIP, del final de cada flujo gzip y zlib, de cada fragmento de un archivo PNG, de los flujos de transporte MPEG-2 y de la secuencia de verificación de cada trama Ethernet, donde se abrevia FCS. Lo que el CRC-32 no es, en ningún caso, es un hash criptográfico. Es una función lineal sobre GF(2): hacer una O-exclusiva con la misma diferencia en dos mensajes de igual longitud produce la misma diferencia en sus sumas, de modo que quien conoce un mensaje y su suma puede derivar un parche de cuatro bytes que produzca la suma que quiera. Además solo tiene 32 bits de ancho, así que por el principio del palomar dos mensajes distintos comparten suma en torno a la raíz cuadrada de 2^32, del orden de 65536 mensajes, mientras que cualquier error accidental de un solo bit se detecta con certeza. Úsalo para corrupción accidental, nunca para integridad frente a un adversario.
Cómo usar
- Abre la Calculadora CRC-32 en tu navegador. La suma se calcula localmente con JavaScript, así que nada de lo que escribas o selecciones se sube a ningún servidor.
- Elige un modo de entrada con los tres botones superiores: Text para una cadena, Hex bytes para binario en crudo o File para comprobar un documento entero.
- En modo Text, escribe o pega en el campo Input text. La cadena se codifica primero en UTF-8, así que los acentos y los emojis ocupan más bytes de los que parecen, y el recuento de bytes se actualiza en vivo.
- En modo Hex, pega parejas de dígitos hexadecimales como 48 65 6c 6c 6f. Los espacios, las comas y los prefijos 0x se eliminan solos, un número impar de dígitos se rechaza y cualquier carácter no hexadecimal provoca un error en lugar de ignorarse en silencio.
- En modo File, elige un archivo con el control Choose a file. La calculadora lo lee con la API de archivos del navegador e indica el tamaño en disco junto al número de bytes realmente procesados.
- Elige la representación que necesites en el menú Output format: Hex, Decimal, Octal, Binary o Base64. El cuadro CRC-32 result se vuelve a renderizar al instante en el formato elegido.
- Consulta la tabla resumen para ver la longitud exacta del mensaje en bytes, el valor CRC-32 y el valor CRC-32b calculado con un byte nulo final para poder comparar.
- Compara el resultado con la suma publicada para confirmar que una descarga, una subida o una carga transferida llegaron intactas.
Ejemplos
Entrada: Modo Text, la cadena CRC-32
Proceso:
6 bytes UTF-8 43 52 43 2D 33 32 pasando por el bucle con tablaResultado: CRC-32 = 0xFF55531A, y CRC-32b con un byte nulo final = 0x2F9F43A4
Entrada: Modo Text, la cadena 123456789
Proceso:
Valor de comprobación de ISO 3309 e ITU-T V.42 para la variante CRC-32/BZIP2Resultado: 0xCBF43926 — si tu implementación discrepa, los parámetros están mal
Entrada: Modo Hex, los bytes 48 65 6c 6c 6f
Proceso:
Cinco bytes en crudo que significan Hello, introducidos como hex en lugar de textoResultado: 0xF7D18982 — distinto de lo que daría calcular la palabra Hello como texto
Entrada: Modo File, un archivo vacío o de tamaño cero
Proceso:
El bucle no se ejecuta nunca, así que la semilla atraviesa directamente la O-exclusiva finalResultado: 0x00000000, y por eso un mensaje vacío es fácil de reconocer
Búsquedas Relacionadas
La gente también busca: calculadora crc32, calcular crc32, checksum crc32, suma de verificación, crc32 online, crc32 de archivo.
calculadora crc32calcular crc32checksum crc32suma de verificacióncrc32 onlinecrc32 de archivocrc32 hexadecimalcrc32 de textocrc32biso 3309itu-t v.420xedb88320verificar integridad de archivozip crcgzip checksumpng crcethernet fcscrc32 base64crc32 vs sha256detectar corrupción
Preguntas Frecuentes
¿Para qué se usa realmente el CRC-32 en el software?
Se usa en todas partes donde una comprobación barata y casi segura contra corrupción accidental vale más que una garantía de seguridad. Cada archivo ZIP guarda una por entrada en su directorio central, y unzip la verifica al extraer, de modo que un archivo truncado o con bits cambiados se reporta como tal en lugar de producir basura en silencio. gzip y zlib añaden un CRC-32 al final de su flujo comprimido, y por eso un .gz corrupto produce un error de checksum en vez de un inexplicable fallo de descompresión. PNG guarda un CRC-32 en cada fragmento, tanto para validar cada bloque por separado como para permitir que el decodificador se detenga en el primero defectuoso. Los flujos de transporte MPEG-2 llevan uno por paquete, y la secuencia de verificación de trama de Ethernet es un CRC-32 calculado normalmente por el hardware de la tarjeta en cada trama que atraviesa un conmutador. En todos esos casos el modelo de amenaza es el mismo: ruido, degradación, escrituras parciales y versiones que no coinciden, no un atacante decidido.
¿El CRC-32 es un hash criptográfico? ¿Puedo usarlo para contraseñas?
No, y usarlo para contraseñas o para verificar la integridad de una descarga que viene de una fuente no confiable sería un error grave. Un CRC es una función lineal sobre el campo GF(2), lo que significa que hacer una O-exclusiva con la misma diferencia en dos mensajes produce la misma diferencia en sus sumas. Por eso quien conoce un mensaje y su suma puede construir otro mensaje, distinto en apenas cuatro bytes, con la suma que le parezca. Es una falsificación que no requiere ingenio ni búsqueda. Además, con solo 32 bits de ancho un atacante puede precalcular una colisión en segundos con una GPU. No tiene clave, ni sal, ni factor de coste, ni comportamiento de avalancha, así que no aporta ninguna de las propiedades de unidireccionalidad, imprevisibilidad o resistencia a la fuerza bruta de las que dependen el almacenamiento de contraseñas y la firma de código. Usa un hash criptográfico como SHA-256 para integridad frente a un adversario, y una función específica como Argon2id o bcrypt para cualquier cosa que tenga forma de credencial.
¿Por qué CRC-32b da un resultado distinto de CRC-32?
Porque los dos nombres describen el mismo algoritmo envuelto en encuadres ligeramente distintos. La fila CRC-32b de esta calculadora ejecuta el algoritmo idéntico sobre tus bytes con un byte 0x00 final añadido, y ese byte extra cambia el estado del registro, así que todos los valores se desplazan. El propósito de una variante así es distinguir la carga de su propio terminador, para que un flujo que termina legítimamente en un byte nulo no se confunda con otro que termina ahí por accidente. Conviene saber que el término se usa de forma inconsistente: la variante BZIP2, que normalmente se escribe CRC-32/BZIP2 y que se identifica por el valor de comprobación 0xCBF43926 para la cadena 123456789, añade cuatro bytes nulos en lugar de uno y es una función distinta. Si vas a interoperar con una herramienta o un formato concreto, comprueba qué añade realmente esa implementación en vez de confiar en el nombre.
¿Qué significa la constante 0xEDB88320?
Es la forma reflejada del polinomio generador del CRC-32, 0x04C11DB7, y aparece en prácticamente cualquier implementación de CRC-32 que vayas a encontrar. El polinomio generador define qué patrones de bits se consideran error. Su forma normal, con los bits en orden directo, es la representación de los libros de texto, pero el orden reflejado permite ejecutar todo el cálculo de derecha a izquierda a través de los bytes, lo que necesita una consulta de tabla y un desplazamiento por byte en lugar de ocho desplazamientos condicionales. En la implementación reflejada, el valor 0x04C11DB7 se invierte a 0xEDB88320, y cada una de las 256 entradas de la tabla se genera empezando por el valor de un byte y aplicando ocho veces ese bucle de inversión: si el bit menos significativo está a uno, se hace la O-exclusiva con 0xEDB88320 y se desplaza a la derecha; si no, solo se desplaza. Construir la tabla desde esa definición, como hace esta herramienta, es más seguro que pegar un array de 256 entradas, porque elimina la posibilidad de que la tabla entregada se desvíe de la definición que dice implementar.
¿Por qué dos archivos distintos obtienen a veces el mismo CRC-32?
Porque el espacio de salida solo tiene 32 bits, así que hay unos 4290 millones de sumas posibles para repartirse entre todos los mensajes posibles, y es inevitable que algunas compartan una. Aplicando el principio del palomar, el número de mensajes necesario para que una colisión sea probable es aproximadamente la raíz cuadrada de 2^32, es decir, unos 65536, de modo que los datos aleatorios encuentran un CRC duplicado por ahí. Los archivos reales son peores que los aleatorios, porque los documentos estructurados suelen diferir en unos pocos sitios predecibles. Esto no es un defecto del diseño, es el diseño funcionando como se pretendía. Un CRC-32 detecta con certeza cualquier error de un solo bit y cualquier error en ráfaga de hasta 32 bits, lo que cubre prácticamente toda la corrupción accidental por ruido, degradación y fallos de transferencia. Lo que no puede hacer es establecer identidad frente a un adversario, porque un adversario puede construir una colisión a propósito en segundos. Si necesitas resistencia a colisiones, necesitas un hash criptográfico.
¿Cómo compruebo que un archivo descargado no está corrupto?
Calcula el CRC-32 del archivo aquí y compáralo con la suma que hayan registrado el responsable de la publicación o el sistema de transferencia. Si coinciden, el archivo llegó sin corrupción. Muchas herramientas ya lo hacen por ti, porque unzip verifica cada entrada, gzip y zlib verifican el final del flujo y los navegadores verifican los fragmentos PNG al decodificar, pero calcular el valor tú mismo es la forma más rápida de confirmar qué produjo una herramienta concreta, y es la única cuando tienes un formato inusual sin verificación integrada. Elige el modo File, selecciona la descarga y lee la salida CRC-32 of file. Una advertencia importante: que coincida el CRC-32 prueba que el archivo es el que generó quien lo publicó, solo si confías en esa persona. Si la descarga pudo ser manipulada en tránsito, un atacante con esa capacidad puede crear otro archivo con la misma suma, y por eso las publicaciones firmadas con GPG o firmas Sigstore existen junto a las sumas de verificación.
¿Se sube mi archivo o mi texto a algún servidor?
No. La calculadora es un componente de cliente: el JavaScript de tu navegador lee tu texto, tus bytes hexadecimales o el archivo que seleccionaste, construye la tabla CRC-32 en memoria y ejecuta el bucle de forma local. Nada se transmite por la red, nada se escribe en un registro de servidor y nada persiste después de cerrar la pestaña. Para el modo de archivo esto se implementa con la API de archivos del navegador, que lee el contenido del disco local bajo demanda. Esto tiene una ventaja práctica, no solo de privacidad: puedes comprobar una imagen de disco de varios gigabytes o un archivo confidencial regulado sin esperar a una subida y sin entregarle una copia de tus datos a un servicio de terceros.