Java中的无符号字节CRC32

时间:2013-02-20 13:07:51

标签: java hash checksum crc32

我正在尝试复制Java中的PHP中可用的CRC32哈希函数。 Java中现有的CRC32类返回不同的哈希,我相信这是因为我的字节数组中的Java字节是无符号-128到128而不是0-255。

我没想到的是如何解决这种情况。我已经看过使用Guava的UnsignedBytes,但我找不到将其作为参数的散列方法。我可以用它来编写我自己的散列函数,但坦率地说,我对它的工作方式或者一般的逐位算术都不够,以使其合理化。

用最简单的术语我试图CRC32有一个字符串并返回十进制表示。

1 个答案:

答案 0 :(得分:9)

CRC不关心标志。

Java的CRC32给了我与PHP相同的结果。

public static void main(String[] args) {
    String a = "Hello World!";
    CRC32 crc = new CRC32();
    crc.update(a.getBytes());
    System.out.println(Long.toHexString(crc.getValue()));
}

输出:1c291ca3

使用this online PHP CRC32 calculator提供的CRC值与上述Java代码相同。