2011-10-12 10 views

Respuesta

5

Jacksum: http://www.jonelo.de/java/jacksum/index.html

cksum   algorithm: POSIX 1003.2 CRC algorithm 
       length:  32 bits 
       type:  crc 
       since:  Jacksum 1.0.0 
       comment:  - under BeOS it is /bin/cksum 
          - under FreeBSD it is /usr/bin/cksum 
          - under HP-UX it is /usr/bin/cksum and 
          /usr/bin/sum -p 
          - under IBM AIX it is /usr/bin/cksum 
          - under Linux it is /usr/bin/cksum 

Es de código abierto.

+0

Funciona perfectamente bien para mí. ¡Gracias por la rápida respuesta! – Kowshik

+0

@palacsint: ¿Hay algún código/algo que pueda usar en mi programa java, ya que no quiero ninguna utilidad de terceros – abi1964

+1

Dato curioso, jonelo.jacksum.algorithm.Cksum tiene la misma interfaz que la clase CRC32 de Java, pero da el mismo resultado como unix cksum. –

2

¿Has probado la clase CRC32?

http://download.oracle.com/javase/7/docs/api/java/util/zip/CRC32.html

Este es el CRC 32 que utiliza gzip.

+3

He leído en línea en varios lugares que el algoritmo crc-32 de unix cksum no es lo mismo que gzip. No he probado esto, pero es probable que sea cierto. Usar 'Jacksum' (ver arriba) funciona bien para mí. – Kowshik

+3

@Kowshik, puedo verificar que el CRC32 de Java NO es lo mismo que/usr/bin/cksum –

+1

@Kowshik, verifique mi respuesta, por favor. –

0

La declaración de Carlos Rendon, "Puedo verificar que el CRC32 de Java NO es lo mismo que/usr/bin/cksum", es incorrecta.

Como mencionó Peter Lawrey, puede usar el CRC32 de Java directamente para obtener la misma suma de comprobación que Unix/Linux cksum.

La forma correcta de hacerlo es:

java.util.zip.CRC32 x = new java.util.zip.CRC32(); 
x.update(bytes); 
StdOut.println("CRC32 (via Java's library)  = " + Long.toHexString(x.getValue())); 

Fuente: http://introcs.cs.princeton.edu/java/61data/CRC32.java.html

El CRC predeterminado que se utiliza se basa en el polinomio utilizado para el error comprobación CRC en la red estándar ISO/IEC 8802-3: 1989.

+0

Ciertamente devuelve resultados diferentes para mí. De hecho, mi máquina (una Mac) tiene tanto '/ usr/bin/cksum' como'/usr/bin/crc32'. 'cksum <(echo -n hello)' produce '3287646509', mientras' crc32 <(echo -n hello) 'produce' 3610a686', y también comprobé que el 'CRC32' de Java devuelve el mismo valor que la línea de comando' crc32' y NO tiene el mismo valor que la línea de comando 'cksum'. –

+0

También en esta Mac, 'cksum -o 3 <(echo -n hello)' produce '907060870' que es lo mismo que' 3610a686'. Entonces 'cksum -o 3' hace juego con el' CRC32' de Java. Pero ese no es el algoritmo predeterminado para '/ usr/bin/cksum' en esta máquina. –

+0

El algoritmo predeterminado no es de 32 bits. Lea la página del manual de cksum para más detalles –

Cuestiones relacionadas