SHA256 哈希值的前 8-12 个字符有多独特?

How unique are the first 8-12 characters of SHA256 hashes?

以这个散列为例:

ba7816bf 8f01cfea 414140de 5dae2223 b00361a3 96177a9c b410ff61 f20015ad

它对我来说太长了,所以我打算使用其中的一小部分,例如:

ba7816bf8f01
ba7816bf

或类似。我的预期用例:

//example.com/video-gallery/lightbox/ba7816bf8f01

我想我会对视频的 URL 进行 SHA256,使用前几个字符作为临时 ID。 我应该从生成的散列中使用多少个字符,以大大减少冲突的机会?

我的想法来自 URLs and Hashing by Google

birthday attacks 上的维基百科页面有一个 table,其中包含您需要产生一定几率与特定数量的位作为随机标识符发生冲突的条目数。例如,如果您希望发生碰撞的几率为百万分之一,并希望存储一百万个文档,则需要少于 64 位(16 个十六进制字符)。

与十六进制相比,

Base64 也是将更多位放入相同长度的字符串的好方法,每个字节占用 1⅓ 个字符,而不是 2 个。