这可能永远不会发生在现实世界中,并且可能永远不会发生,但让我们考虑一下:假设您有一个git存储库,进行提交,并且变得非常不幸:其中一个blob最终拥有相同的SHA-1另一个已存在于您的存储库中.问题是,Git将如何处理这个?简直失败了?找到一种方法来链接两个blob并根据上下文检查哪一个需要?
更多的是脑筋急转弯而非实际问题,但我发现这个问题很有趣.
最近,一组研究人员使用相同的SHA-1哈希生成了两个文件(https://shattered.it/).
由于Git将此哈希用于其内部存储,这种攻击在多大程度上会影响Git?
让我通过说我知道发生这种情况极其微不足道的几率来说明这一点.我知道制造它或多或少是不可能的,并且极不可能"在野外"发生.这只是关于Git内部的假设问题.
所以,这是我的问题:如果两个Git提交哈希相同,会发生什么?对于初学者:
我刚刚从这篇HN-post 中了解到 git 正在转向新的散列算法(从SHA-1到SHA-256)
我想知道什么SHA-256最适合 git 的用例。是否有任何/许多强有力的技术原因,或者SHA-256受欢迎程度是否可能是一个重要因素?(我在猜测)看着https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions页面,我看到你有许多现代和旧的替代品。其中一些比SHA-256(例如https://crypto.stackexchange.com/q/26336)性能更高(如果不是更高的话,几乎相同)
说我有一个5000字符的文字.我通过散列程序运行它并生成一个40 char长的散列.现在我运行另一个文本blob,10000个字符.它仍然会产生40个字符长的哈希值.对于任何长度的文本都是如此.
我的问题是,如果哈希值都是唯一的,我不能将任何东西压缩成40个字符串吗?
更新:我将两个东西混合在一起:第一行实际指向目录(在下面的答案中有很好的解释),第二行指向父提交.我让第二个误导了我.谢谢大家的澄清.
我正在学习git,我正在复制她所做的代码.我在一个名为Make a commit的小节中,这不是第一次提交.她承诺后,这就是她得到的(为了格式化原因我划掉了她的电子邮件):
tree ce72afb5ff229a39f6cce47b00d1b0ed60fe3556
父母774b54a193d6cfdd081e581a007d2e11f784b9fe
作者Mary Rose Cook ......
提交人Mary Rose Cook ...
a2
而且,神秘地,我得到了(我划掉了我的个人信息)
tree ce72afb5ff229a39f6cce47b00d1b0ed60fe3556
parent c96fbf6143ccef645d1cb867b05427c399a9bcb3
作者....
提交者......
a2
比较当前树的两个哈希,很明显我们都得到相同的哈希(我确实按照她的代码).
所以我很好奇这是如何可能的?我知道git据说可以隐藏那个时刻的快照,但我的megadatas肯定与她的不同.愿有人知道会发生什么吗?