java - Java 中的无符号字节 CRC32

标签 java hash checksum crc32

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

我想不出的是如何解决这种情况。我看过使用 Guava 的 UnsignedBytes,但找不到将其作为参数的散列方法。我可以用它来编写我自己的哈希函数,但坦率地说,我对它的工作原理或一般的按位算术知之甚少,无法做到这一点。

用最简单的术语来说,我正在尝试 CRC32 有一个字符串并返回十进制表示。

最佳答案

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给出了与上述 Java 代码相同的 CRC 值。

关于java - Java 中的无符号字节 CRC32,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14980625/

相关文章:

c - C 的 STM 哈希库(glib?)

algorithm - 生成属性的通用算法

php - 在旧用户的 symfony2 security.yml 中使用 MD5

hash - 为什么下载有时会被标记为 md5、sha1 和其他哈希指标?

java - 调整应用程序窗口大小时如何调整应用程序内图像的大小?

java - 匿名接口(interface)实现

java - 如何使用 Java 8 计算当前时间和下周六之间的秒数

java - JNI 层中无符号字符数组的内存泄漏

c++ - 校验和和缩短

svn - 颠覆校验和算法