Различные значения CRC32 в Java и Go - PullRequest
1 голос
/ 20 января 2020

Я нахожусь в процессе написания утилиты в Go, которую можно использовать для вычисления контрольной суммы CRC32 входной строки. Подобная утилита существует в Java, которую мы широко используем, и она хорошо работает для нас.

Утилита Java использует java.util.zip.CRC32 для вычисления контрольной суммы. Псевдокод выглядит следующим образом:

 public static void main(String[] args) {
        final Checksum checksum = new CRC32();
        byte[] input1Bytes = "input1".getBytes(StandardCharsets.UTF_8);
        checksum.update(input1Bytes, 0, input1Bytes.length);
        final byte[] input2Bytes = "input2".getBytes(StandardCharsets.UTF_8);
        checksum.update(input2Bytes, 0, input2Bytes.length);
        final byte[] input3Bytes = "input3".getBytes(StandardCharsets.UTF_8);
        checksum.update(input3Bytes, 0, input3Bytes.length);
        System.out.println("Checksum in Java : " + checksum.getValue());
    }

Утилита в Go использует crc32 из пакета hash пакета Go SDK (версия 1.13.6) (import "hash/crc32") Псевдо код для генерации контрольной суммы в Go выглядит следующим образом:

    table := crc32.MakeTable(0)
    checksum := crc32.Checksum([]byte("input1"), table)
    checksum = crc32.Update(checksum, table, []byte("input2"))
    checksum = crc32.Update(checksum, table, []byte("input3"))
    log.Printf("Checksum in go : %v", checksum)

Вывод из кода Java:

Checksum in Java : 2705255531

Вывод из кода Go :

Checksum in go : 4294967295

Я также сравнил байтовые массивы, сгенерированные в 3 шагах, и они имеют одинаковые значения.

Что мне не хватает и как мне обеспечить обработку этого несоответствия ?

Цените помощь!

1 Ответ

1 голос
/ 20 января 2020

Используйте тот же полином, что и ваш код Java, и вы получите те же результаты.

Самый распространенный полином CR C -32 находится в crc32 Пакет как константа: crc32.IEEE = 0xedb88320:

table := crc32.MakeTable(crc32.IEEE)

С этим изменением вы получите тот же результат. Попробуйте на Go Детская площадка .

...