是否有可能获取提交的时间/日期知道提交哈希但无法访问存储库?

时间:2014-09-03 11:10:00

标签: git date git-commit

假设我有提交哈希,但我没有访问git存储库,是否可以获得提交时间?

如何做到这一点?

根据this answer,提交哈希包含完成时的日期和时间。

示例:

1484e89060b2043be0b71209bacc2254161f1a8f是在Wed Sep 3 09:30:59 2014 +0300上发布的。

3 个答案:

答案 0 :(得分:4)

如“Are there any dangers in exposing git sha1 commit hashes?”中所述:

  

绝对没有办法将git commit的SHA 1哈希值与提交的实际内容相关联。

     

虽然SHA-1名义上是单向的,但理论上这可以让想要猜测对象内容的攻击者验证他的猜测是否正确。
  这需要准确猜测,直到最后一点,包括时间戳和其他类似的事情

因此,如果您无法访问完整的git repo,那似乎是不可能的。


this thread中所述,您对SHA1唯一能做的就是找到具有相同SHA1的内容:

  

“反向”一词不是正确的用词   意思是您可以生成SHA1输出与其他SHA1输出匹配的另一个输入。这是因为SHA1发生了冲突。

     

因此“foo”可以哈希为1,而“bar”也可以哈希为1。   这并不意味着1意味着foo,但这意味着如果您的密码为foo,则bar在散列时也会起作用,并与存储的散列进行比较。

     

如果原始输入不是很短,则极不可能找到具有相同SHA-1哈希值的输入。
  这些攻击起作用的原因是密码较弱且SHA-1计算速度快,而不是由于SHA-1作为加密哈希函数的任何弱点。


注意:(找到具有相同SHA1的内容)实际项目bradfitz/gitbrute的作用(“有趣”)

  

gitbrute 强制执行一对作者+提交者时间戳,以便   生成的git commit具有您想要的前缀。

     

会找到满足您前缀的最近时间。

我在“How would git handle a SHA-1 collision on a blob?

中提及过它

答案 1 :(得分:1)

您可能认为git提交ID是某种包含某些信息的加密数据。但是Git提交ID是哈希:

  

[...]是SHA-1哈希 - 您正在存储的内容的校验和加上标题(from here)

同样从密码学理论中我们知道哈希具有Non-invertible属性。

因此,不可能仅从ID获取有关提交的任何信息。

答案 2 :(得分:0)

你去吧

git log -2 --pretty=tformat:%aD:%H 1484e89060b2043be0b71209bacc2254161f1a8f

%aD为您提供了创作日期。

您可以添加其他选项,例如

%cn: committer name
%an: author name

git log -2 --pretty=tformat:%aD:%cn:%an:%H 1484e89060b2043be0b71209bacc2254161f1a8f

如果您想使用缩写哈希,请使用%h代替%H

您可以通过git命令shell执行此操作。