当仅使用散列的前6个字符时,GIT的碰撞可能会发生哈希

时间:2014-01-08 22:38:49

标签: git hash

嘿伙计们,我们正在使用多个存储库,并将数据库中的哈希值存储为标识符。

问题是,我的应用程序稍后只有一个短哈希(AKA:8df639)而不是完整哈希(AKA:8df639b301a1e10c36cc2f03bbdf8863)。我虽然使用如下的select语句

SELECT foo FROM table WHERE hash LIKE '8df639%' LIMIT 1

但是我开始害怕我可能会在哈希开始时遇到哈希冲突,以便堆积起来。

问题是,这是一个合理的恐惧,还是这样可以,因为我在36 ^ 4? (1679616组合),由于这些来自不同的存储库,是否真的有可能发生碰撞?

1 个答案:

答案 0 :(得分:1)

如果可能的话,最好存储整个哈希值。

Git本身会接受短哈希(通常是7个字符,而不是6个字符),但只要它们保持唯一。如果您生成两个以8df639b开头的提交,那么在Git识别您正在讨论的提交之前,您将被迫输入更多的哈希值。

顺便说一下,我相信你实际上有六个字符(16 ^ 6)的16,777,216个组合,但是在生成那么多提交对象之前你很可能会很好地发生碰撞。