Есть ли какая-либо библиотека/код на Java для вычисления 32-битного CRC потока байтов таким образом, чтобы это соответствовало команде cksum в unix?
Java-совместимая функция cksum
Ответы (3)
Джексум: 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
Это с открытым исходным кодом.
person
palacsint
schedule
12.10.2011
Отлично работает для меня. Спасибо за быстрый ответ!
- person Kowshik; 13.10.2011
@palacsint: есть ли код/алгоритм, который я могу использовать в своей Java-программе, так как мне не нужны никакие сторонние утилиты?
- person AabinGunz; 04.09.2012
Забавный факт: jonelo.jacksum.algorithm.Cksum имеет тот же интерфейс, что и класс Java CRC32, но дает тот же результат, что и unix cksum.
- person Carlos Rendon; 25.06.2013
Вы пробовали класс CRC32?
http://download.oracle.com/javase/7/docs/api/java/util/zip/CRC32.html
Это crc 32, который использует gzip.
person
Peter Lawrey
schedule
12.10.2011
Я читал в Интернете в нескольких местах, что алгоритм crc-32 unix cksum отличается от алгоритма gzip. Я не проверял это, но, скорее всего, это правда. Использование «Jacksum» (см. выше) отлично работает для меня.
- person Kowshik; 13.10.2011
@Kowshik, я могу убедиться, что CRC32 Java НЕ совпадает с /usr/bin/cksum
- person Carlos Rendon; 25.06.2013
@Kowshik, проверь мой ответ, пожалуйста.
- person Hitham S. AlQadheeb; 09.08.2017
Утверждение Карлоса Рендона: «Я могу убедиться, что CRC32 в Java НЕ совпадает с /usr/bin/cksum», неверно.
Как упомянул Питер Лоури, вы можете напрямую использовать CRC32 Java, чтобы получить ту же контрольную сумму, что и 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
Используемый по умолчанию CRC основан на полиноме, используемом для проверки ошибок CRC в сетевом стандарте ISO/IEC 8802-3:1989.
person
Hitham S. AlQadheeb
schedule
09.08.2017
Это, безусловно, возвращает разные результаты для меня. Фактически, на моей машине (Mac) есть и
/usr/bin/cksum
, и /usr/bin/crc32
. cksum <( echo -n hello )
дает 3287646509
, а crc32 <( echo -n hello )
дает 3610a686
, и я также проверил, что Java CRC32
возвращает то же значение, что и командная строка crc32
, и НЕ то же самое значение, что и командная строка cksum
.
- person Robert Tupelo-Schneck; 30.08.2017
Также на этом Mac
cksum -o 3 <( echo -n hello )
дает 907060870
, что совпадает с 3610a686
. Таким образом, cksum -o 3
соответствует CRC32
в Java. Но это не алгоритм по умолчанию для /usr/bin/cksum
на этой машине.
- person Robert Tupelo-Schneck; 30.08.2017
Алгоритм по умолчанию не 32-битный. Прочтите справочную страницу cksum для более подробной информации.
- person Hitham S. AlQadheeb; 06.09.2017
@HithamS.AlQadheeb неверен. Как личное тестирование, так и просмотр вики-страницы cksum показывают, что он несовместим с CRC-32. Страница руководства для cksum ничего не говорит об алгоритме и/или о том, сколько битов он требует.
- person johnbr; 20.06.2018
@ HithamS.AlQadheeb Я также приглашаю вас прочитать больше. man7.org/linux/man-pages/man1/cksum.1. HTMLа> . и blog.box.com/ blog/crc32-checksums-the-good-the-bad-and-the-ugly .
- person johnbr; 24.06.2018