Git 有没有特别不太可能的SHA1哈希?

Git 有没有特别不太可能的SHA1哈希?,git,sha1,sha,Git,Sha1,Sha,我有一张地图。非常类似于Git 我想在这张地图上放一小部分,有限数量的“特殊”条目。我希望能够更改二进制blob的值,但仍然使用相同的键引用它们 正确的方法是使用地图 黑客的方法(我实际上就是这样做的)是定义: SHA1 specialKeyA = 0x00000 ... 00 SHA1 specialKeyB = 0x00000 ... 01 我知道SHA1生成的值是均匀分布的。但是我想知道是否有一个星号,是否有一些角型散列(比如0x00..或者0xFF…)保证不会发生 我觉得我现在的设计很

我有一张地图。非常类似于Git

我想在这张地图上放一小部分,有限数量的“特殊”条目。我希望能够更改二进制blob的值,但仍然使用相同的键引用它们

正确的方法是使用
地图

黑客的方法(我实际上就是这样做的)是定义:

SHA1 specialKeyA = 0x00000 ... 00
SHA1 specialKeyB = 0x00000 ... 01
我知道SHA1生成的值是均匀分布的。但是我想知道是否有一个星号,是否有一些角型散列(比如
0x00..
或者
0xFF…
)保证不会发生

我觉得我现在的设计很安全,但我只是好奇:)


编辑:我已经在指望哈希唯一性了,所以我觉得这个设计很安全。问题是出于好奇:是否有一些价值观是SHA1碰巧无法创造的。到目前为止,评论中的人口普查似乎是第号。

据我所知,SHA1没有已知的
00…00
(而且
00…01
00…02
,或其他“特殊”值)。即使它不会违反安全散列的任何正式定义,IVs的设计也是为了避免这种人类可识别的模式


不过,我可能会建议不要使用这些值,因为其他人可能也想到了使用这些特殊值的想法,例如,参见。如果它对您来说都是一样的,我将生成一个随机的80位值,例如
83a…c3
,并将您的计数器附加到它上面,例如
83a…c300…01
83a…c300…02
,等等。

相当肯定任何这样的偏差都是一个缺陷,它会使反转变得更容易/可能。考虑到你的“魔法散列值”与任何东西发生碰撞的可能性在天文学上都不大,我会说“去吧”。它仍然是一个黑客。但在这一点上,我们不要过度设计,你的问题的答案可能是。SHA1产生20字节的输出;由于鸽子洞原理,这些输出中的每一个都将在0到264-1的输入范围内产生。如果你能将你的“黑客”存储为20字节以外的任何东西,并这样做;那么你就完成了。@ElliottFrisch也许应该补充一点,所有SHA1散列的可能性都是相同的。因此,在给定的上下文中,虽然问题的答案可能是“否”,但提议的方法仍然相当安全。@Sigi I修改了我的评论。如果存储长度超过20字节的魔法散列值,则它不能是有效的SHA1散列。因此,对于SHA1,21字节的哈希值尤其不可能出现。