根据我的理解,散列是一个为任意长度的输入生成唯一的固定长度(假设为 64 位)输出的过程。(如有错误请指正)
因此,如果我获取哈希函数可以生成的所有 (x) 个可能的 64 位哈希值,并在其末尾附加 0 或 1。我得到一个大小为 2x 的列表(其中每个哈希值的长度为 65 位)。
如果我将所有 2x 组合作为同一哈希函数的输入,它如何为所有输入生成唯一的哈希值?
你是对的。这称为哈希冲突,这是真实存在的。这不是一个大问题的原因是散列的数量非常大,以至于这些类型的冲突很少见。不过,您的 64 位示例有点不切实际。256 位或 512 位是更可能的情况。(即使是 128 也不再被认为足够强大。)并且这种情况下的哈希范围是如此之大,以至于找到创建哈希冲突的输入非常困难。