Date: Fri, 5 Dec 1997 22:23:25 -0500 (EST)
From: Lenimar Nunes de Andrade 
Subject: O que e' esse negocio de CRC?

Ola', pessoal!

Quem ja' tiver prestado atencao nas listagens geradas pelo
PKZIP  (ou  por  outros programas semelhantes, como o ARJ)
deve ter percebido que tem uma "estranha" coluna chamada CRC-32
entre outras colunas com titulos mais obvios como "Size", "Date"
etc :

Length  Method   Size  Ratio   Date    Time    CRC-32    Name
------  ------   ----- -----   ----    ----   --------   ----
178486  DeflatX  83541  54%  22-10-97  18:38  5bf063c4   LNA.BMP
...

CRC e' uma abreviacao para "Checagem de Redundancia Ciclica"
e e' uma informacao extra que e' anexada aos arquivos compac-
tados (mas que pode ser usada em qualquer situacao, nao so'
com compactacao de arquivos). Com essa utilissima informacao
extra voce pode testar se um arquivo esta' intacto, sem pro-
blemas, sem bytes extraviados, mesmo  antes de utiliza'-lo.
Qualquer alteracao no arquivo, por menor que seja, acarreta
alteracao significativa no valor da CRC.

A CRC e' um numero hexadecimal (base 16) calculado atraves de
diversas operacoes aritmeticas com os bytes dos arquivos. Uma
descricao detalhada disso pode ser encontrada em varios luga-
res da grande rede, por exemplo em
	  ftp://mat.ufpb.br/pub/docs/faqs/crc.zip

Para voces verificarem o quanto esse negocio de CRC e' uma
ideia incrivel, seguem dois exemplos:

(1) Peguei um arquivo-texto  com varias  mensagens recebidas
    via e-mail cujo tamanho total era 15.121 bytes. Calculei
    a CRC-32 do arquivo-texto. Para isso, usei o programinha
    ftp://ftp.unicamp.br/pub/simtelnet/msdos/fileutil/32crcfck.zip

    O valor encontrado da CRC-32 que obtive foi:   d6061ec1

    La' pelo meio do arquivo, troquei um sinal de ":" por um ";".
    Calculei novamente a CRC-32 com o novo arquivo modificado e
    o resultado foi completamente diferente do anterior: f32c20a9

    Observem assim que uma mudanca quase imperceptivel no arquivo
    causou uma mudanca drastica no valor da CRC do arquivo.

(2) Peguei uma foto digitalizada,  formato BMP, 178.486 bytes,
    e calculei a CRC da mesma. Obtive como resposta:  5bf063c4

    Carreguei a foto em um processador de imagens  (como  o
    Paint Brush) e troquei um pixel (pontinho da imagem) de
    cor branca por um de cor cinza claro. Salvei a imagem com
    um unico pixel modificado em disco e calculei novamente a
    CRC.  Obtive como resultado:  9279ea0d

    Mais uma vez notem que uma mudanca quase imperceptivel no
    arquivo leva a mudancas radicais no valor da CRC.

O calculo da CRC fornece assim um recurso bastante confiavel
para saber se um arquivo foi danificado ou nao. Se qualquer
arquivo tiver um unico byte trocado, corrompido, entao o cal-
culo da CRC detectara' facilmente a alteracao.

Voce pode ate' ainda nao ter ouvido falar em CRC. So' que todo
arquivo ZIP que tem no seu micro tem um calculo de CRC inclu-
i'do. Entao, sem fazer barulho, ela sempre esteve discretamente
presente por toda parte, em cada programa compactado que voce
pegou pela grande rede.

Quando mandamos o PKUNZIP ou o WinZip testar um arquivo, o que
ele faz e' recalcular a CRC dele e comparar com a CRC que foi
calculada na hora do empacotamento  que fica guardada dentro
do pacote ZIP. Se elas coincidirem, entao o programa diz que
esta' tudo OK; caso contrario, ele mostra uma mensagem de erro
dizendo que o arquivo esta' danificado.

Realmente e' uma ideia genial esse negocio de calculo da CRC !!

[]'s, Lenimar

P.S.
----
   Para visualizar os valores da CRC em arquivos ZIP no DOS,
basta digitar o seguinte comando
              C:\> PKZIP   -v  Nome_do_arquivo_ZIP
          ou	C:\> PKUNZIP  -v  Nome_do_arquivo_ZIP
Com o ARJ deve ser digitado algo semelhante:
		C:\> ARJ  v  Nome_do_arquivo_ARJ

Para testar um arquivo (ou seja comparar CRC arquivada
com CRC recalculada na hora) deve-se digitar:
         C:\> PKUNZIP  -t  Nome_do_arquivo_ZIP
   ou	  C:\> ARJ  t  Nome_do_arquivo_ARJ

   Com o WinZip deve-se usar a opcao Actions/Test -- neste 
caso o WinZip nao mostra os valores das CRCs, mas  se ele
mostrar um "OK" isto significa que a CRC arquivada coincide
com a que foi recalculada pelo Winzip e, consequentemente,
o arquivo esta' sem problemas.