1) 出于真正低哈希冲突的目的,我可以只使用 sha1 的 128 位中的一半而不是处理 sha1 本身吗?我知道这不适合加密哈希,但我只需要哈希表键的哈希。
2)计算时间不是优先事项,除此之外我正在散列非常小的数据。特别是,我主要会采用 2 或 3 个 64 位散列并对它们进行散列以获得另一个 64 位散列。为此目的,是否有比 sha1 更好的选择?同样,碰撞应该是非常不可能的。
3)我是一个sql新手。在 sql 中使用 64 位哈希作为 id 是个好主意吗?64 位 id 会在 sqlite 或 postgres 中导致性能问题吗?我将需要跨多个数据库(包括 Lucene 索引)协调数据,所以我认为我应该直接在表中处理哈希,而不是使用自动递增的 id(这只会在一个 db 中有意义,而不是跨所有数据存储)。我认为 64 位是一个很好的折衷方案:对于不太可能发生的冲突来说足够大,但可以节省空间(和查找时间?)。
4) CRC-64 怎么样?这会产生足够随机的分布吗?