2011-10-12 387 views

回答

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 

它是开源的。

+0

适用于我。感谢您及时的回复! – Kowshik

+0

@palacsint:是否有我可以在我的java程序中使用的代码/算法,因为我不想要任何第三方实用程序 – abi1964

+1

有趣的是,jonelo.jacksum.algorithm.Cksum与Java的CRC32类具有相同的接口,结果为unix cksum。 –

2

您是否尝试过CRC32类?

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

这是gzip的使用CRC 32。

+3

我在线阅读了几个地方,unix cksum的crc-32算法与gzip不一样。我没有测试过,但很可能是真的。使用'Jacksum'(见上文)适合我。 – Kowshik

+3

@Kowshik,我可以验证Java的CRC32与/ usr/bin/cksum –

+1

@Kowshik不一样,请检查我的答案。 –

0

Carlos Rendon的声明“我可以验证Java的CRC32与/ usr/bin/cksum不一样”是不正确的。

正如Peter Lawrey所提到的,您可以直接使用Java的CRC32获得与Unix/Linux cksum相同的校验和。

做正确的方法是:

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

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

使用的基于网络的检测标准 ISO/IEC用于CRC错误多项式默认CRC 8802-3:1989。

+0

它肯定会为我返回不同的结果。事实上,我的机器(Mac)同时拥有'/ usr/bin/cksum'和'/ usr/bin/crc32'。 ''cksum <(echo -n hello)'产生'3287646509',而'crc32 <(echo -n hello)'产生'3610a686',我也检查了Java的'CRC32'返回的值与命令行' crc32',而不是与命令行'cksum'相同的值。 –

+0

同样在这台Mac上,'cksum -o 3 <(echo -n hello)'产生与'3610a686'相同的'907060870'。所以'cksum -o 3'确实符合Java的'CRC32'。但是这不是这台机器上'/ usr/bin/cksum'的默认算法。 –

+0

默认算法不是32位。阅读cksum手册页以获取更多详细信息 –