вычисление контрольной суммы git packfile sha1 в java - PullRequest
2 голосов
/ 22 марта 2011

Я изучаю файл пакета Git и в настоящее время пытаюсь воспроизвести (на Java) то, что я считаю 20-байтовой контрольной суммой SHA1 для всего файла пакета. Я беру массив байтов и включаю 4-байтовый заголовок PACK до конца сжатых данных последнего упакованного объекта. Все, что я прочитал, указывает на то, что следующие 20 байтов являются контрольной суммой SHA1 для всего файла пакета.

20-байтовая контрольная сумма, которая является частью байтового массива, полученного от Git: B910248BF9B63AC53595E3835CA57BDAF08DA830

Я использую следующее для вычисления моей собственной контрольной суммы SHA1: <br /> crypt = MessageDigest.getInstance("SHA-1");<br /> crypt.reset();<br /> crypt.update(testData);<br /> byte [] result = crypt.digest();

Мой результат заканчивается как: B910248BF9B63AC53595E3835CA57BDAF08DA813

Я сбит с толку тем, что только последний байт моего результата может отличаться от Git (если я использую правильную часть потока байтов). Если бы единственной проблемой был диапазон данных, передаваемых digest (), тогда вся вычисленная контрольная сумма, скорее всего, выглядела бы иначе.

Есть идеи?

1 Ответ

0 голосов
/ 09 июля 2012

используйте JGit:

byte[] data = new byte[] { ... };
ObjectInserter.Formatter f = new ObjectInserter.Formatter();
ObjectId id = f.idFor(OBJ_BLOB, data);
String hash = id.getName();
...