首页 文章

在java中计算git packfile sha1校验和

提问于
浏览
2

我正在学习Git packfile,并且正在尝试重现(在Java中)我认为整个packfile的SHA1 20字节校验和 . 我将字节数组从“PACK”4字节 Headers 中取出,并将其包括在最后一个打包对象的压缩数据的末尾 . 我读过的所有内容都表明接下来的20个字节是整个packfile的SHA1校验和 .

从Git接收的字节数组的20字节校验和是:B910248BF9B63AC53595E3835CA57BDAF08DA830

我使用以下来计算自己的SHA1校验和: crypt = MessageDigest.getInstance("SHA-1"); crypt.reset(); crypt.update(testData); byte [] result = crypt.digest();

我的结果最终为:B910248BF9B63AC53595E3835CA57BDAF08DA813

我很困惑我的结果的最后一个字节只能与Git不同(如果我使用的是字节流的正确部分) . 如果唯一的问题是传递给digest()的数据范围,那么整个计算的校验和很可能看起来不同 .

有任何想法吗?

1 回答

  • 0

    使用JGit:

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

相关问题