【发布时间】:2016-04-20 12:59:18
【问题描述】:
使用 Git 我不明白如何使用 SHA 生成一个 40 位十六进制数字代码,然后可以将其映射到任何可能长达数百行的文件。
按照我的想法,假设字符串'1' -> 00...01,字符串'2' -> 00..02,字符串'a34ed..fc' -> a34ed ..fc 等,因此哈希映射会自行返回,那么很明显所有哈希码都会很快用完,并且任何 41 个字符长的字符串都将重用其中一个代码。
我也知道 SHA 不保证它永远是唯一的,但我不知道它是如何接近有用的。
【问题讨论】:
-
如果没有用,git 就不会工作。但显然确实如此。
-
是的,如果您的存储库中有 2^160 个文件,那么 SHA 哈希将不再起作用。
-
其实由于birthday paradox,问题会从
2^80文件开始。这仍然比我们世界的任何物理限制都重要。 -
我以为是文件的内容被散列了,文件的数量无关紧要?使用我的示例,包含一个 41 个字符串的单个文件不能被唯一地散列权。
-
相关:schneier.com/blog/archives/2015/10/sha-1_freestart.html 第一个记录在案的 SHA-1 近乎碰撞花了 10 天时间在专门用于该任务的 64-GPU 集群上发生。发生在您的 git 存储库中。您多次赢得强力球彩票的几率要高得多。