2011-10-12 25 views

risposta

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 

E 'open source.

+0

funziona perfettamente per me. Grazie per la risposta rapida! – Kowshik

+0

@palacsint: Esiste un codice/algo che posso utilizzare nel mio programma java, dal momento che non desidero alcuna utilità di terze parti – abi1964

+1

Fun fact, jonelo.jacksum.algorithm.Cksum ha la stessa interfaccia della classe CRC32 di Java ma fornisce lo stesso risultato come unix cksum. –

2

Hai provato la classe CRC32?

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

Questo è il CRC 32 che utilizza gzip.

+3

Ho letto in linea in diversi punti che l'algoritmo crx-32 di unks crks-32 non è lo stesso di gzip. Non ho provato questo, ma è probabile che sia vero. Usare 'Jacksum' (vedi sopra) funziona bene per me. – Kowshik

+3

@Kowshik, posso verificare che il CRC32 di Java NON sia uguale a/usr/bin/cksum –

+1

@Kowshik, controlla la mia risposta, per favore. –

0

L'affermazione di Carlos Rendon, "Posso verificare che il CRC32 di Java NON è uguale a/usr/bin/cksum", non è corretto.

Come menzionato da Peter Lawrey, è possibile utilizzare direttamente la CRC32 di Java per ottenere lo stesso checksum di Unix/Linux cksum.

Il modo corretto per farlo è:

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

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

Il CRC predefinito utilizzato è basato sul polinomio usato per errore CRC check-in l'standard della rete ISO/IEC 8802-3: 1989.

+0

Per me sicuramente restituisce risultati diversi. In effetti, la mia macchina (un Mac) ha sia '/ usr/bin/cksum' che'/usr/bin/crc32'. 'cksum <(echo -n hello)' produce '3287646509', mentre' crc32 <(echo -n hello) 'produce' 3610a686', e ho anche controllato che '' CRC32' di Java restituisce lo stesso valore della riga di comando ' crc32' e NON lo stesso valore della riga di comando 'cksum'. –

+0

Anche su questo Mac, 'cksum -o 3 <(echo -n hello)' produce '907060870', che è lo stesso di' 3610a686'. Quindi 'cksum -o 3' corrisponde a' CRC32' di Java. Ma non è l'algoritmo predefinito per '/ usr/bin/cksum' su questa macchina. –

+0

L'algoritmo predefinito non è a 32 bit. Leggi la pagina man di cksum per maggiori dettagli –

Problemi correlati