Я изучаю файл пакета 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 (), тогда вся вычисленная контрольная сумма, скорее всего, выглядела бы иначе.
Есть идеи?