Вычислить SHA файла API Github

У меня есть файл, содержимое которого "из теста" - 9 байт. В документации сказано, что SHA созданных файлов вычисляется с использованием SHA1:

Хэш файла SHA-1 вычисляется и сохраняется в объекте большого двоичного объекта.

(из https://developer.github.com/v3/git/blobs/)

Однако, когда я вычисляю шестнадцатеричный вывод SHA1 «из теста», я получаю 5669556d9a5c27fdd649dcaaa0873757c2aa402f.

API Github сообщает, что SHA равен 62b551731eada762035d4665978027cd44291290 - это возвращаемый ETag и значение "sha" в ответе API для получения файла. Кроме того, когда я вызываю конечную точку CreateFile со значением «from test» и 566955... в качестве sha, мне говорят, что SHA неверен.

Я также пробовал добавлять новые строки, вычислять SHA значения содержимого в кодировке base64, вычислять SHA base64 + завершающую новую строку, и ни один из них не дал мне 62b551731eada762035d4665978027cd44291290. Как Github вычисляет это значение?

Я дважды проверил, что содержимое удаленного файла одинаково - "из теста" - каким-то образом SHA все еще отличается.


person Kevin Burke    schedule 14.04.2019    source источник
comment
Я думал, что это будет ответом, но это тоже не похоже.   -  person Chris    schedule 14.04.2019
comment
Это ответ, вам нужно изменить 14 на 9.   -  person Kevin Burke    schedule 14.04.2019
comment
О, хорошо. Я изменил количество байтов, но не думал, что это дает правильное значение. Рад, что у тебя все получилось.   -  person Chris    schedule 14.04.2019


Ответы (1)


Ах - GitHub вычисляет сумму blob <length>\x00<contents>, где длина - это длина строки содержимого в байтах, а \x00 - единственный нулевой байт.

sha1("blob 9\x00from test") дает правильную сумму!

См. https://stackoverflow.com/a/7225329/329700 для получения дополнительной информации.

person Kevin Burke    schedule 14.04.2019
comment
FWIW, это не GitHub, а Git. - person Chris; 14.04.2019