Crc Calculator Online Binário Opções


Cálculo CRC on-line e biblioteca livre Introdução aos cálculos CRC Sempre que os dados digitais são armazenados ou interagidos, pode ocorrer corrupção de dados. Desde o início da ciência da computação, as pessoas têm pensado em maneiras de lidar com esse tipo de problema. Para dados em série, eles vieram com a solução para anexar um bit de paridade para cada byte enviado. Este mecanismo de detecção simples funciona se um número ímpar de bits em um byte muda, mas um número par de bits falsos em um byte não será detectado pela verificação de paridade. Para superar este problema, as pessoas procuraram mecanismos de som matemáticos para detectar múltiplos bits falsos. O cálculo do CRC ou verificação de redundância cíclica foi o resultado disso. Atualmente, os cálculos de CRC são usados ​​em todos os tipos de comunicação. Todos os pacotes enviados através de uma conexão de rede são verificados com um CRC. Também cada bloco de dados em seu disco rígido tem um valor CRC anexado a ele. O mundo do computador moderno não pode fazer sem esses cálculos CRC. Então vamos ver por que eles são tão amplamente utilizados. A resposta é simples, eles são poderosos, detectam muitos tipos de erros e são extremamente rápidos para calcular, especialmente quando os chips de hardware dedicados são usados. Alguém poderia pensar, que usando uma soma de verificação pode substituir cálculos adequados CRC. É certamente mais fácil calcular uma soma de verificação, mas checksums não encontrar todos os erros. Vamos pegar uma string de exemplo e calcular uma soma de verificação de um byte. A seqüência de exemplo é Lammert que converte para os valores ASCII 76. 97. 109. 109. 101. 114. 116. A soma de verificação de um byte dessa matriz pode ser calculada adicionando todos os valores, do que dividindo-a por 256 e mantendo o restante. A soma de verificação resultante é 210. Você pode usar a calculadora acima para verificar este resultado. Neste exemplo, usamos um checksum de um byte longo que nos dá 256 valores diferentes. Usando uma soma de verificação de dois bytes resultará em 65.536 possíveis valores de soma de verificação diferentes e quando um valor de quatro bytes é usado há mais de quatro bilhões de valores possíveis. Podemos concluir que com uma soma de verificação de quatro bytes a chance de que acidentalmente não detectem um erro é menor que 1 a 4 bilhões. Parece bastante bom, mas isso é apenas teoria. Na prática, os bits não mudam puramente aleatórios durante as comunicações. Eles muitas vezes falham em rajadas, ou devido a picos elétricos. Vamos supor que no nosso exemplo de matriz o bit mais baixo significativo do caractere L é definido, eo menor bit significativo de charcter a é perdido durante a comunicação. O receptor irá ver a matriz 77. 96. 109. 109. 101. 114. 116 representando a corda Mmmert. A soma de verificação para esta nova seqüência ainda é 210. Mas o resultado é obviamente errado, só depois de dois bits mudaram. Mesmo se tivéssemos usado um checksum longo de quatro bytes, não teríamos detectado este erro de transmissão. Portanto, calcular uma soma de verificação pode ser um método simples para detectar erros, mas não dá muito mais proteção do que o bit de paridade, independente do tamanho da soma de verificação. A idéia por trás de um cálculo de valor de verificação é simples. Use uma função F (bval, cval) que insere um byte de dados e um valor de verificação e exibe um valor de verificação recalculado. De facto, os cálculos de soma de verificação tal como descritos acima podem ser definidos deste modo. Nosso exemplo de soma de verificação de um byte poderia ter sido calculado com a seguinte função (em linguagem C) que chamamos repetidamente para cada byte na seqüência de entrada. O valor inicial para cval é 0. A idéia por trás do cálculo CRC é olhar para os dados como um grande número binário. Esse número é dividido por um certo valor eo restante do cálculo é chamado de CRC. Dividir no cálculo de CRC em primeira olha para custar muito poder de computação, mas pode ser executado muito rapidamente se nós usamos um método similar ao aprendido na escola. Como exemplo, calcularemos o restante para o caractere mdashwhich é 1101101 em notationmdash binário dividindo-o por 19 ou 10011. Note que 19 é um número ímpar. Isso é necessário, como veremos adiante. Por favor, consulte seus livros escolares como o método de cálculo binário aqui não é muito diferente do método decimal que você aprendeu quando você era jovem. Pode parecer um pouco estranho. Também notações diferem entre países, mas o método é semelhante. Com cálculos decimais você pode verificar rapidamente que 109 dividido por 19 dá um quociente de 5 com 14 como o restante. Mas o que também vemos no esquema é que cada bit extra para verificar só custa uma comparação binária e em 50 dos casos uma substração binária. Você pode facilmente aumentar o número de bits dos dados de teste stringmdash por exemplo para 56 bits se usarmos nosso exemplo de valor Lammert mdashand o resultado pode ser calculado com 56 comparações binárias e uma média de 28 substrações binárias. Isso pode ser implementado em hardware diretamente com apenas muito poucos transistores envolvidos. Também os algoritmos de software podem ser muito eficientes. Para cálculos CRC, nenhuma subtração normal é usada, mas todos os cálculos são feitos em módulo 2. Nessa situação você ignora os bits de transporte e, na verdade, a subtração será igual a uma operação exclusiva ou. Isso parece estranho, o restante resultante tem um valor diferente, mas a partir de um ponto de vista algébrico a funcionalidade é igual. Uma discussão disto precisaria de conhecimento de nível universitário da teoria de campo algébrico e eu acho que a maioria dos leitores não estão interessados ​​nisso. Consulte o final deste documento para obter os livros que discutem isso em detalhes. Agora temos um método de cálculo CRC que é implementável em hardware e software e também tem um sentimento mais aleatório do que calcular uma soma de verificação normal. Mas como ele irá executar na prática quando um ou mais bits estão errados Se escolhermos o divisormdash19 em nosso exemplo para ser um número ímpar, você não precisa de matemática de alto nível para ver que cada erro de bit será detectado. Isso ocorre porque cada erro de bit único permite que o dividendo mude com uma potência de 2. Se, por exemplo, o bit n muda de 0 para 1, o valor do dividendo aumentará com 2 n. Se, por outro lado, o bit n muda de 1 para 0, o valor do dividendo diminuirá com 2 n. Porque você não pode dividir qualquer potência de dois por um número ímpar, o restante do cálculo CRC vai mudar eo erro não vai passar despercebido. A segunda situação que queremos detectar é quando dois bits simples mudam nos dados. Isto requer algumas matemáticas que podem ser lidas no livro de Tanenbaums mencionado abaixo. Você precisa selecionar o seu divisor com muito cuidado para ter certeza de que independente da distância entre os dois bits errados você sempre detectá-los. Sabe-se que os valores comumente utilizados 0x8005 e 0x1021 dos cálculos CRC16 e CRC-CCITT apresentam um desempenho muito bom nesta questão. Observe que outros valores podem ou não, e você não pode calcular facilmente qual valor de divisor é apropriado para detectar erros de dois bits e qual não é. Confie em extensa pesquisa matemática sobre esta questão feita há algumas décadas por matemáticos altamente qualificados e usar os valores obtidos por essas pessoas. Além disso, com o nosso cálculo CRC queremos detectar todos os erros em que um número ímpar de bits muda. Isso pode ser obtido usando um divisor com um número par de bits definidos. Usando a matemática do módulo 2 você pode mostrar que todos os erros com um número ímpar de bits são detectados. Como eu disse antes, na matemática do módulo 2, a função de substração é substituída pela função exclusiva ou. Existem quatro possíveis operações XOR. Vemos que para todas as combinações de valores de bit, a estranheza da expressão permanece a mesma. Ao escolher um divisor com um número par de bits, a singularidade do restante é igual à estranheza do dividente. Portanto, se a estranheza do dividendo muda porque um número ímpar de bits muda, o restante também mudará. Assim, todos os erros que alteram um número ímpar de bits serão detectados por um cálculo CRC que é realizado com um tal divisor. Você pôde ter visto que os valores comumente usados ​​do divisor 0x8005 e 0x1021 têm realmente um número impar dos bocados, e não mesmo como indicado aqui. Isso ocorre porque dentro do algoritmo há um bit extra oculto 2 16 que faz com que o valor de divisor real usado 0x18005 e 0x11021 dentro do algoritmo. Por último, mas não menos importante, queremos detectar todos os erros de explosão com o nosso cálculo de CRC com um comprimento máximo a ser detectado e todos os erros de ruptura mais longos a serem detectados com uma alta probabilidade. Um erro de rajada é bastante comum nas comunicações. É o tipo de erro que ocorre devido a relâmpagos, comutação de relés, etc. onde durante um pequeno período todos os bits são definidos para um. Para realmente entender isso, você também precisa ter algum conhecimento de álgebra de módulo 2, então por favor aceite que com um divisor de 16 bits você será capaz de detectar todas as rajadas com um comprimento máximo de 16 bits e todas as rajadas mais longas com pelo menos 99.997 certeza . Numa abordagem matemática pura, o cálculo do CRC é escrito como cálculos polinomiais. O valor do divisor é mais frequentemente não descrito como um número binário, mas um polinômio de certa ordem. Na vida normal alguns polinômios são usados ​​com mais freqüência do que outros. Os três utilizados no cálculo do CRC on-line nesta página são o CRC16 de 16 bits de largura eo CRCCCITT eo CRC32 de 32 bits de largura. O último é provavelmente mais usado agora, porque, entre outros, é o gerador de CRC para toda a verificação de tráfego de rede e validação. Para todos os três tipos de cálculos de CRC, tenho uma biblioteca de software livre disponível. O programa de teste pode ser usado diretamente para testar arquivos ou seqüências de caracteres. Você também pode olhar para os códigos-fonte e integrar essas rotinas CRC em seu próprio programa. Esteja ciente dos valores de inicialização do cálculo do CRC e do possível pós-processamento necessário, como lançar bits. Se você não fizer isso você pode obter resultados diferentes do que outras implementações CRC. Todo esse pré e pós-processamento é feito no programa de exemplo por isso não deve ser difícil de fazer a sua própria implementação de trabalho. Um teste usado comum é calcular o valor de CRC para a seqüência de caracteres ASCII 123456789. Se o resultado de sua rotina corresponde ao resultado do programa de teste ou o resultado neste site, sua implementação está funcionando e compatível com a maioria das outras implementações. Assim como uma referência, o polinômio funciona para os cálculos mais comuns do CRC. Lembre-se de que o termo de ordem mais alta do polinômico (x 16 ou x 32) não está presente na representação do número binário, mas implicado pelo próprio algoritmo. Funções polinomiais para CRCs.-Ing. K. Gorontzi, 2005 Os bits de entrada são deslocados para a porta XOR muito à esquerda. O MSB (bit mais à esquerda) de cada byte é deslocado em primeiro. Cada flipflop representa um único bit de saída CRC. O flipflop mais à esquerda é o MSB do CRC. Esta implementação não precisa aumentar a mensagem de entrada serial com zeros. Observe que no nosso caso os flipflops são desmarcados para zeros no início de cada cálculo CRC. Uma simples implementação VERILOG do polinômio acima é mostrada aqui. Você pode copiar diretamente o snippet de origem para seu código (distribuído em LGPL): Uma simples implementação C do polinômio acima é mostrada no código a seguir. Novamente, você pode copiar diretamente o snippet de origem para o seu código (distribuído sob LGPL): Claro, o software é fornecido aqui como é sem garantias expressas ou implícitas em tudo. Considera esta página um pouco útil Por favor, deixe-me uma nota por contato. Propósito A finalidade do CRCCalculator é exibir interativamente os valores CRC-16 e CRC-32 para uma seqüência ou arquivo especificado. (Os valores de CRC-32 coincidirão com aqueles calculados pelo PKZIP.) Arquivos adicionais, CRC16Dem e CRC32Dem. Mostram como criar um programa de linha de comando para calcular valores CRC. Um programa de linha de comando quotCquot também está disponível. Materiais e Equipamento Requisitos de Software Windows 95982000 e Delphi 34567 (para recompilar) ou Linux e Kylix 3 (para recompilar) Requisitos de Hardware Visor VGA Clique duas vezes no ícone CRCCalculator. EXE para iniciar o programa (Windows) ou executar o programa em Linux usando. CrcCalculator .. Digite qualquer texto na caixa de edição. Observe os valores CRC-16 e CRC-32 em decimal ou hexadecimal. Selecione Arquivo tabsheet. Clique no botão Ler e selecione um arquivo. Observe os valores CRC-16 e CRC-32 em decimal ou hexadecimal. Valores esperados Os valores hexadecimais não são alterados pela versão do Delphi, mas os valores decimais destinam-se a não serem assinados. Os valores CRC-16 sempre foram unsigned, mas desde que não havia nenhum inteiro sem sinal de 4 bytes em D1-D3, os valores decimais são assinados para o CRC-32 até a versão Delphi 4. Consulte a discussão InitializationFinalization abaixo para obter uma descrição dos Métodos de Inicialização 1 e 2. Consulte Felipe Rocha Machados comentários sobre a impressão de inteiros de 32 bits em D3. O CRC-32s dos arquivos abcLower. TXT. ABCupper. TXT. E ThisIsAString. TXT no arquivo CRCDelphi. ZIP correspondem aos valores acima, que também são verificados no programa de linha de comando CRC32Dem. PAS: CRC-32 Bytes F ilename -------- -------- ------------------------ 352441C2 3 abcLower. TXT A3830348 3 ABCUpper. TXT 0876633F 16 ThisIsAString. TXT Discussão Os valores de CRC, especialmente o CRC-32, são Uma maneira extremamente boa para verificar a integridade de um arquivo. Se o CRC-32 para um arquivo permanecer o mesmo, há apenas uma probabilidade extremamente pequena de que o arquivo tenha sido alterado - cerca de 1 em 4 bilhões. CRCs poderia ser usado como uma ferramenta de verificação preliminar para encontrar arquivos idênticos. Se os CRCs de dois arquivos não coincidirem, o arquivo não será o mesmo. Isso pode até ser usado para comparar arquivos de imagem. Consultar tabelas. O método quotardwarequot de computar CRCs envolve manipulações de bits, o que é muito ineficiente para uma computação de software. Em vez de computar o CRC bit a bit, uma tabela de consulta de 256 elementos pode ser usada para executar o equivalente a operações de 8 bits de cada vez. Para um CRC-16, a tabela de consulta consiste em 256 WORDs de 2 bytes (veja abaixo, ou a unidade CRC16.PAS Para a tabela real, ou o programa CRCTable para cálculo da tabela de consulta para o polinómio do gerador x 16 x 15 x 2 1): Tabela CONST: ARRAY0..255 DE PALAVRA (0000, C0C1, C181,0140, C301,03C0, 0280, C241, C601,06C0,0780, C741,0500, C5C1, C481,0440, CC01,0CC0,0D80, CD41,0F00, CFC1, CE81,0E40,0A00, CAC1, CB81,0B40, C901,09C0,0880, C841, D801, 18C0, 1980, D941,1B00, DBC1, DA81,1A40,1E00, DEC1, DF81,1F40, DD01,1DC0,1C80, DC41,1400, D4C1, D581,1540, D701,17C0,1680, D641, D201,12C0,1380, D341,1100, D1C1, D081,1040, F001,30C0, 3180, F141, 3300, F3C1, F281, 3240,3600, F6C1, F781,3740, F501, 35C0,3480, F441,3C00, FCC1, FD81,3D40, FF01,3FC0,3E80, FE41, FA01,3AC0,3B80, FB41,3900, F9C1, F881,3840,2800, E8C1, E981, 2940, EB01,2BC0,2A80, EA41, EE01,2EC0, 2F80, EF41,2D00, EDC1, EC81,2C40, E401,24C0,2580, E541,2700, E7C1, E681,2640,2200, E2C1, E381,2340, E101,21C0,20 80, E041, A001,60C0,6180, A141, 6300, A3C1, A281,6240,6600, A6C1, A781,6740, A501,65C0,6480, A441,6C00, ACC1, AD81,6D40, AF01, 6FC0, 6E80, AE41, AA01,6AC0, 6B80, AB41,6900, A9C1, A881,6840,7800, B8C1, B981,7940, BB01, 7BC0,7A80, BA41, BE01,7EC0,7F80, BF41,7D00, BDC1, BC81,7C40, B401,74C0,7580, B541,7700, B7C1, B681,7640,7200, B2C1, B381, 7340, B101,71C0,7080, B041,5000,90C1,9181,5140,9301,53C0, 5280,9241,9601, 56C0,5780,9741,5500,95C1,9481,5440,9C01, 5CC0,5D80,9D41,5F00,9FC1,9E81,5E40,5A00,9AC1,9B81,5B40, 9901,59C0,5880,9841,8801,48C0, 4980,8941,4B00,8BC1,8A81, 4A40,4E00,8EC1,8F81,4F40,8D01,4DC0,4C80,8C41,4400,84C1, 8581,4540,8701,47C0,4680,8641,8201,42C0,4380, 8341, 4, 100, 81, 81, 808, 4040) Dada a tabela de consulta acima, o código para calcular um CRC-16 é o seguinte (ver inicialização de finalização abaixo): PROCESSO CalcCRC16 (p: pByte nbyte: WORD VAR CRCvalue: WORD) WORD q: pByte O algoritmo é o seguinte: 1. exclusive - ou o byte de entrada com o byte de baixa ordem do registro CRC para obter um INDEX 2. deslocar o CRC reg Repetir os passos 1 a 3 para todos os bytes BEGIN q: p PARA i: 1 PARA nBYTE DO BEGIN CRCValor: Hi (CRCvalue) XOR Tabela q XOR Lo (CRCvalue) INC (q) END END Para um CRC-32, a tabela de consulta consiste em 256 DWORDs de 4 bytes (veja também a unidade CRC32.PAS). As constantes aqui são para o polinómio do gerador CRC-32, tal como definido no Microsoft Systems Journal, Março 1995, pp. 107-108 Tabela CONST: ARRAY0..255 DE DWORD (00000000, 77073096, EE0E612C, 990951BA, 076DC419, 706AF48F, E963A535, 9E6495A3, 0EDB8832, 79DCB8A4, E0D5E91E, 97D2D988, 09B64C2B, 7EB17CBD, E7B82D07, 90BF1D91, 1DB71064, 6AB020F2, F3B97148, 84BE41DE, 1ADAD47D, 6DDDE4EB, F4D4B551, 83D385C7, 136C9856, 646BA8C0, FD62F97A, 8A65C9EC, 14015C4F, 63066CD9, FA0F3D63, 8D080DF5, 3B6E20C8, 4C69105E, D56041E4, A2677172, 3C03E4D1, 4B04D447, D20D85FD, A50AB56B, 35B5A8FA, 42B2986C, DBBBC9D6, ACBCF940, 32D86CE3, 45DF5C75, DCD60DCF, ABD13D59, 26D930AC, 51DE003A, C8D75180, BFD06116, 21B4F4B5, 56B3C423, CFBA9599, B8BDA50F, 2802B89E, 5F058808, C60CD9B2, B10BE924, 2F6F7C87, 58684C11, C1611DAB, B6662D3D, 76DC4190, 01DB7106, 98D220BC, EFD5102A, 71B18589, 06B6B51F, 9FBFE4A5, E8B8D433, 7807C9A2, 0F00F934, 9609A88E, E10E9818, 7F6A0DBB, 086D3D2D, 91646C97, E6635C01, 6B6B51F4, 1C6C6162, 856530D8, F26 2004E, 6C0695ED, 1B01A57B, 8208F4C1, F50FC457, 65B0D9C6, 12B7E950, 8BBEB8EA, FCB9887C, 62DD1DDF, 15DA2D49, 8CD37CF3, FBD44C65, 4DB26158, 3AB551CE, A3BC0074, D4BB30E2, 4ADFA541, 3DD895D7, A4D1C46D, D3D6F4FB, 4369E96A, 346ED9FC, AD678846, DA60B8D0, 44042D73, 33031DE5, AA0A4C5F, DD0D7CC9, 5005713C, 270241AA, BE0B1010, C90C2086, 5768B525, 206F85B3, B966D409, CE61E49F, 5EDEF90E, 29D9C998, B0D09822, C7D7A8B4, 59B33D17, 2EB40D81, B7BD5C3B, C0BA6CAD, EDB88320, 9ABFB3B6, 03B6E20C, 74B1D29A, EAD54739, 9DD277AF, 04DB2615, 73DC1683, E3630B12, 94643B84, 0D6D6A3E, 7A6A5AA8, E40ECF0B, 9309FF9D, 0A00AE27, 7D079EB1, F00F9344, 8708A3D2, 1E01F268, 6906C2FE, F762575D, 806567CB, 196C3671, 6E6B06E7, FED41B76, 89D32BE0, 10DA7A5A, 67DD4ACC, F9B9DF6F, 8EBEEFF9, 17B7BE43, 60B08ED5, D6D6A3E8, A1D1937E, 38D8C2C4, 4FDFF252, D1BB67F1, A6BC5767, 3FB506DD, 48B2364B, D80D2BDA, AF0A1B4C, 36034AF6, 41047A60, DF60EFC3, A867DF55, 316E8EEF, 4669BE79, CB61B38C, BC66831A, 256FD2A0, 5268E236, CC0C7795, BB0B4703, 220216B9, 550 5262F, C5BA3BBE, B2BD0B28, 2BB45A92, 5CB36A04, C2D7FFA7, B5D0CF31, 2CD99E8B, 5BDEAE1D, 9B64C2B0, EC63F226, 756AA39C, 026D930A, 9C0906A9, EB0E363F, 72076785, 05005713, 95BF4A82, E2B87A14, 7BB12BAE, 0CB61B38, 92D28E9B, E5D5BE0D, 7CDCEFB7, 0BDBDF21, 86D3D2D4, F1D4E242, 68DDB3F8, 1FDA836E, 81BE16CD, F6B9265B, 6FB077E1, 18B74777, 88085AE6, FF0F6A70, 66063BCA, 11010B5C, 8F659EFF, F862AE69, 616BFFD3, 166CCF45, A00AE278, D70DD2EE, 4E048354, 3903B3C2, A7672661, D06016F7, 4969474D, 3E6E77DB, AED16A4A, D9D65ADC, 40DF0B66, 37D83BF0, A9BCAE53, DEBB9EC5, 47B2CF7F, 30B5FFE9, BDBDF21C, CABAC28A, 53B39330, 24B4A3A6, BAD03605, CDD70693, 54DE5729, 23D967BF, B3667A2E, C4614AB8, 5D681B02, 2A6F2B94, B40BBE37, C30C8EA1, 5A05DF1B, 2D02EF8D) Dada a pesquisa acima Tabela, o código para calcular um CRC-32 é o seguinte (consulte initialalizationfinalization abaixo): Use CalcCRC32 como um procedimento para CRCValue pode ser passado em, mas também retornado. Isso permite múltiplas chamadas para CalcCRC32 para o cálculo quotsamequot CRC-32. PROCEDURE CalcCRC32 (p: ponteiro ByteCount: DWORD VAR CRCValue: DWORD) O seguinte é um pouco críptico (mas executa muito rapidamente). O algoritmo é o seguinte: 1. exclusive - ou o byte de entrada com o byte de baixa ordem do registro CRC para obter um INDEX 2. desloca o CRC registra oito bits para o direito 3. exclusivo - ou o registro CRC com o conteúdo De TableINDEX 4. repita os passos 1 a 3 para todos os bytes VAR i: DWORD q: BYTE BEGIN q: p FOR i: 0 para ByteCount-1 DO BEGIN CRCvalue: (CRCvalor SHR 8) XOR Tabela XOR (CRCvalor E 000000FF) INC (Q) END END Você pode passar quase qualquer argumento para esta rotina, pois o primeiro parâmetro é um ponteiro. Para uma string, passe o endereço do primeiro caractere, por exemplo: CalcCRC32 (Addr (s1), LENGTH (s), CRC32) Para evitar uma violação de acesso no Delphi 4 (ou posterior) certifique-se Comprimento gt 0. (Im não sure porque Delphi 3 didnt queixam-se.) Esta rotina pode ser usada para verificar a tabela CRC32 das constantes não foi acidentalmente modificada. O código a seguir na inicialização da unidade CRC32 verifica a matriz de 1024 bytes de DWORDs: VAR CRC32Table: DWORD BEGIN Verifique se a tabela usada para calcular os CRCs não foi modificada. Graças a Gary Williams para esta sugestão, Jan. 2003. CRC32Table: FFFFFFFF CalcCRC32 (Addr (tabela0), SizeOf (tabela), CRC32Table) CRC32Table: NOT CRC32Table IF CRC32Table lt 6FCF9E13 THEN ShowMessage (CRC32 Tabela CRC32 é IntToHex (Crc32Table, 8) , Esperando 6FCF9E13) END. Para calcular o mesmo CRC-32 usado no utilitário PKZIP, comece com um CRCvalor de FFFFFFFF. Depois de chamar CalcCRC32 acima (qualquer número de vezes), a finalização consiste em um 1s complemento do CRCvalue. Isso pode ser calculado com a expressão NOT CRCvalue em Delphi. Veja detalhes adicionais na próxima seção. Inicialização e finalização. A inicialização e finalização da computação CRC são arbitrárias. Muitos anos atrás, quando eu comecei a calcular CRCs, eu definir o valor inicial para 0 e não finalização - este é quotMethod 1quot descrito acima em valores esperados. CRC16: 0 IF LENGTH (s) 0 Evitar violação de acesso em D4 THEN CalcCRC16 (Addr (s1), LENGTH (s), CRC16) O CRC-32 quotstandard (o usado por PKZIP) começa com FFFFFFFF como o valor inicial e então Executa um complemento 1s para render o valor final - este é o quotMétodo 2 descrito acima em Valores Esperados. O que é feito na calculadora CRC para CRC-32s: CRC32: FFFFFFFF Para corresponder PKZIP IF LENGTH (s) gt 0 Evitar violação de acesso em D4 THEN CalcCRC32 (Addr (s1), LENGTH (s), CRC32) CRC32: NOT CRC32 Para corresponder PKZIP No cálculo CRC16 o valor inicial é FFFF com Método 2. Graças a Rolf Gebhardt e Glen Harman por apontar uma inconsistência sobre como finalização foi tratada em uma versão anterior deste artigo. CRC de um arquivo. Todos os bytes de um arquivo devem ser passados ​​para as rotinas CalcCRC, ou seja, CalcCRC16 e CalcCRC32, para calcular o CRC de um arquivo. O primitivo IO BlockRead mais antigo é usado na rotina CalcFileCRC16 na unidade CRC16 uma vez que BlockRead em um ponto era a única maneira de ler um fluxo binário de bytes. CalcFileCRC32 usa o fluxo de memória mais contemporâneo para ler os bytes de um arquivo (quando a compilação condicional StreamIO é definida). Use MemoryStream para ler o arquivo no modo binário. PROCEDURE CalcFileCRC32 (FromName: STRING VAR CRCvalor: DWORD VAR TotalBytes: TInteger8 VAR erro: WORD) VAR Stream: TMemoryStream BEGIN erro: 0 CRCValue: FFFFFFFF Stream: TMemoryStream. Create TRY TRY Stream. LoadFromFile (FromName) IF Stream. Size 0 THEN CalcCRC32 (Stream. Memory, Stream. Size, CRCvalue) EXCEPT ON E: Erro EReadError DO: 1 END CRCvalue: NOT CRCvalue TotalBytes: Stream. Size FINALMENTE Stream. Free END END O procedimento acima pressupõe que o arquivo se encaixará facilmente na memória em um TMemoryStream. Infelizmente, isso pode ser um mau pressuposto, especialmente quando alguns arquivos são maiores do que a memória física. Por exemplo, o processamento de um arquivo de 1 GB em um fluxo de memória com apenas 512 MB de memória física pode, no mínimo, taxar o processamento da memória virtual do sistema operacional. Por enquanto, isso não é muito problema. Programa FileCheck. Consulte o Relatório do Laboratório FileCheck para obter informações sobre a criação de CRCs de arquivos, diretórios ou mesmo volumes inteiros. (QuotMetaquot CRCs - ou seja, CRCs de CRCs de uma lista bem ordenada de arquivos - usado para detectar mudanças em diretórios ou volumes de disco inteiros.) Programas de linha de comando. Os exemplos de linha de comando, CRC16Dem e CRC32Dem podem ser compilados a partir de uma janela DOS (supondo que seu caminho contém o diretório bin Delphi), digitando: DCC32 CRC16Dem. PAS ou DCC32 CRC32Dem. PAS Estude os programas de linha de comando CRC16Dem e CRC32Dem para uma maneira de calcular CRCs sem uma interface do Windows. O CD de instalação do Delphi tem um arquivo CRC32.C, que mostra como calcular CRC-32s, bem como a tabela de pesquisa, no diretório InfoExtrasZlibSrc. Peter Haas Delphi unidade para demonstração de cálculo de CRC, com base no documento: quotA Indolor Guia de CRC Algoritmos de Detecção de Erros ftp: ftp. rocksoftpaperscrcv3.txt Peter Haas unidade contém funções para calcular um arbitrário CRC (até 32 bits) por dado parâmetros ( Polynom, Init, XorOut, ReflectIn, ReflectOut). Outra parte é a geração de uma Tabela de Consulta eo cálculo com esta tabela. A unidade também pode ser usada para encontrar os parâmetros para um cálculo de CRC desconhecido com tentativa e erro. Por último, mas não menos importante, contém a função unit, que cria a fonte Delphi para calcular um CRC com os parâmetros fornecidos em um aplicativo separado. Delphi. pjh2.deunitsdownloadCRCs. zip quotPara o Amor do Gamequot por Michael Barr, Embedded Systems Programming. Dec. 1999, pp. 47-54. Embeddedinternet99129912connect. htm quotSlow e Steady Never Lost the Racequot por Michael Barr, Embedded Systems Programming. Jan. 2000, pp. 37-46. Mostra como calcular tabela de consulta CRC. Embeddedinternet00010001connect. htm O CRC Pitstop é um repositório de informações sobre CRC e outros algoritmos de verificação rosscrc Código de Redundância Cíclica CRC - Der (em alemão) informatik. uni-frankfurt. de Robert Lees código otimizado para computação CRC: optimcodeexcrc. zip Steve Schafers UseNet Post Mostrando o cálculo de CRC-32 Tabela de consulta Bjrn Kriedemanns UseNet Post com CRC Unidade de Abril de 1997 DDJ: CRC16, XYZModemCRC16, CRC32 Lars Truijenss UseNet Post mostrando código Delphi para XModem CRC-16 (X 16 X 12 X 5 1) com uma tabela de pesquisa Uma unidade de calculadora CRC fornece três funções de velocidade otimizada para calcular (ou continuar a calcular) uma verificação de redundância cíclica (CRC). Aplicável ao protocolo XModem (16-bit CRC), SEAs quotARCquot utilidade, PKZip (32-bit CRC) e muitos outros software compatível, delphi. icm. edu. plftpd10freecrc. zip. SWAG (Grupo de Arquivamento de Software) CRC Snipets: Inclui várias rotinas CRC e Checksum gdsoftswagdownloads. html gdsoftswagcrc. zip (requer quotReader quot programa para visualizar) quotCalculating Checksums CRC em Cquot por Colin Mahoney em junho 1999 CC Users Journal. Algoritmos Alfresco: Whirlpool (Algoritmos CRC), Julian Bucknall desvenda CRC, Delphi Magazine. Issue 48, August 1999. Split e Join (use CRCs para verificar se a cópia está correta depois que um arquivo é dividido em arquivos de tamanho de disquete separados e mais tarde rejoined) unduArticles010511d. html O D7 quotCompanion Toolsquot (Disk 1) tem um diretório nagsoftwaresolutionscrc32library com um CRC32.EXE da NAG Software Solutions. Consulte a Biblioteca CRC32 no CD 1 das Ferramentas do Delphi Studio Companion. Dígitos de verificação (cartões de crédito e o quotModulo 10quot algoritmo de dígito de verificação) delphiforfun. orgProgramsCheckdigits. htm Literatura útil: quotProcedure para computar valores de CRC-32, Microsoft Systems Journal. March 1995, pp. 107-108. QuotByte-wise CRC Cálculos por Aram Perez em IEEE Micro. Junho 1983, pp. 40-50. Mostra como criar uma tabela de pesquisa que é a melhor maneira de implementar em software (versus as mudanças que são feitas quando implementadas em hardware). Um Tutorial sobre Computações de CRC por Tenkasi V. Ramabadran e Sunil S. Gaitonde em IEEE Micro. August 1988, pp. 62-75. QuotCyclic Redundancy Verifica a Integridade de Dados ou Identidade por William H. Press e Saul A. Teukolsky, Computers in Physics. JulAug 1989, pp. 88-91. Outros polinômios padrão: CRC-16 Inverso: x 16 x 14 x 1 1 SDLC Inverso: x 16 x 11 x 4 1 CRC-12: x 12 x 11 x 3 x 2 x 1 1 Conclusões Os valores de CRC, especialmente o CRC-32 , São uma maneira extremamente boa para verificar a integridade de uma seqüência de caracteres ou até mesmo um arquivo. Palavras-chave verificação de redundância cíclica, CRC-32, APPTYPE CONSOLE, tabela de consulta, XOR, Comp, Int64, IntToHex, Addr, Delphi, Kylix CLX (Biblioteca de componentes para plataformas cruzadas - Windows ou Linux) CrcCalculator executável: CRCCLX. tar. gz No Linux para extrair arquivos: gunzip lt CRCCLX. tar. gz tar xvf - VCL (Biblioteca de Componentes Visuais - Windows somente) Delphi 2 - 6 Fonte e EXE (234 KB): CRCDelphi. ZIP Versão antiga) Borland C 5.02 quotCquot CRC-32 Fonte e EXE (45 KB): CRCc. ZIP Use o arquivo quotmake filequot para compilar: make - f crc32.mak Modifique o arquivo. mak para apontar para a localização correta do wildargs. obj. O arquivo. mak executa automaticamente um teste que os resultados corresponderão aos de PKZIP.) Este utilitário de linha de comando pode ser usado com caracteres curinga para encontrar o CRC-32 de arquivos em um diretório, por exemplo: crc32.

Comments