Date: Fri, 5 Dec 1997 22:23:25 -0500 (EST) From: Lenimar Nunes de AndradeSubject: 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.