2

PHPで利用できるCRC32ハッシュ関数をJavaで複製しようとしています。Java内の既存のCRC32クラスは異なるハッシュを返します。これは、バイト配列のJavaバイトが0〜255ではなく-128〜128の符号なしであるためだと思います。

私が理解できていないのは、この状況を回避する方法です。GuavaのUnsignedBytesを使用することを検討しましたが、それを引数として取るハッシュメソッドが見つかりません。これを使用して独自のハッシュ関数を作成することもできますが、率直に言って、それがどのように機能するか、または一般的にビット単位の演算でそれを妥当なものにするのに十分ではありません。

簡単に言うと、CRC32には文字列があり、10進表現を返します。

4

1 に答える 1

10

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

このオンラインPHPCRC32計算機を使用すると、上記のJavaコードと同じCRC値が得られました。

于 2013-02-20T13:20:15.940 に答える