Crc

Alguém conhece alguma biblioteca que faz calculos de erros com CRC?

até mais!

java.util.zip?

bom… vou dar uma olhada, mas ela é somente pra zip? ou qualquer coisa que eu precise calcular CRC?

Para qualquer coisa.

Veja que pode ser usado para qualquer coisa, embora esteja no pacote java.util.zip.

Vou dar um exemplo com a seguinte seqüência de bytes:

0000    48 65 6C 6C 6F 2C 77 6F  72 6C 64 0D 0A            Hello,world..
import java.util.zip.CRC32;

class TesteCRC32 {
    public static void main(String[] args) throws Exception {
        CRC32 crc = new CRC32();
        String helloWorld = "Hello,world\r\n";
        crc.reset();
        crc.update (helloWorld.getBytes ("ISO-8859-1"));
        System.out.println (Long.toHexString (crc.getValue()));
        // deve imprimir "dc379aa0"
    }
}

(Porque usei essa seqüência de bytes ? É que gerei um arquivo exatamente com esse conteúdo, usando o comando “echo hello,world>teste.bin”, para checar independentemente com um programa em C que eu tenho e com o utilitário zip, que também calcula o CRC32. Ele deu mesmo esse valor, DC379AA0, para todos os métodos - o programa Java, o utilitário zip e o programa em C.)

e tem como eu mudar o polinomio do CRC?

tipo, eu queria usar esse polinômio aqui: x^5 +x^3 +1

ou seja se eu usar o metodo updade(byte[] b), e colocando esse polinomio que eu quero em um vetor de bytes, funciona?

Como o polinômio é fixo (não lembro direito qual é o do CRC-32), você teria de usar alguma outra implementação. Mas não é difícil escrever uma implementação do CRC com outros polinômios.

Como de costume, nada como procurar no Google com as palavras:

JAVA CRC

Um resultado legal foi este:

http://mindprod.com/jgloss/crc.html

ah… legal, vou dar uma olhada!!! vlw!!