我有Map<SHA1, BinaryBlob>
。与Git非常相似。
我想把一小部分有限数量的&#34;特别&#34;进入此地图的条目。我希望能够更改二进制blob的值,但仍然可以使用相同的密钥来引用它们。
正确的方法是使用Map<Either<SHA1, SpecialKey>, BinaryBlob>
。
执行此操作的黑客方式(这是我实际执行此操作的方式)是定义:
SHA1 specialKeyA = 0x00000 ... 00
SHA1 specialKeyB = 0x00000 ... 01
我知道SHA1产生均匀分布的值。但是我想知道是否有星号,如果有几个角落哈希(例如0x00..
或0xFF...
)保证不会发生。
我对目前的设计感到非常安全,但我只是好奇:)
编辑:我已经指望哈希唯一性,所以我觉得非常安全的设计。问题出在好奇心上:是否存在一些SHA1恰好无法生成的值。到目前为止,评论中的人口普查似乎没有......
答案 0 :(得分:1)
据我所知,SHA1没有00…00
的已知前映像(并且00…01
,00…02
或其他“特殊”值都没有。即使它不违反任何安全散列的正式定义,IV也旨在避免这种人类可识别的模式。
我仍然可能会建议不要使用这些值,因为其他人也可能提出使用这些特殊值的想法,例如请参阅this question about a git commit with all zeros。如果它与您完全相同,我会生成一个随机的80位值,例如83a…c3
,并将您的计数器附加到它,例如83a…c300…01
,83a…c300…02
等。