Hash 是否存在可以保证哈希算法唯一的情况?
如果我使用比数据(例如sha-256)字节大的散列算法对大小受限的类似数据(例如,社会保险号)进行散列,散列会保证与原始数据相同的唯一性级别吗?如果使用类似sha的加密散列,那么简短的回答是肯定的。您始终可以创建一个保证唯一性的自定义哈希。对于已知域(如SSN)中的数据,练习相对简单 如果目标散列值的可用位实际上比正在散列的多,则散列只是将输入值映射到一个可用的输出值。这将是一个简单的线性映射,从作为多字节整数的输入值到作为多字节整数的输出Hash 是否存在可以保证哈希算法唯一的情况?,hash,unique,sha256,hash-code-uniqueness,Hash,Unique,Sha256,Hash Code Uniqueness,如果我使用比数据(例如sha-256)字节大的散列算法对大小受限的类似数据(例如,社会保险号)进行散列,散列会保证与原始数据相同的唯一性级别吗?如果使用类似sha的加密散列,那么简短的回答是肯定的。您始终可以创建一个保证唯一性的自定义哈希。对于已知域(如SSN)中的数据,练习相对简单 如果目标散列值的可用位实际上比正在散列的多,则散列只是将输入值映射到一个可用的输出值。这将是一个简单的线性映射,从作为多字节整数的输入值到作为多字节整数的输出 当您的目标散列值的位数少于正在散列的位数时,就无法保证
当您的目标散列值的位数少于正在散列的位数时,就无法保证唯一性 a的一个关键特性是,无论输入如何,您都不会受到任何合理怀疑的碰撞。这对于小于输出大小的输入也是有效的,这与熵较小的较长消息相同。因此,您可以使用SHA-2而不用担心冲突。哈希冲突的概率与输入字符串的大小无关(除非它指示需要在多个输入之间保持唯一性)。使用完美的哈希算法对0和1进行哈希运算时,可能会发生哈希冲突,尽管这种可能性为1/(2^位长度)。在SHA-256的情况下,这实际上是零 哈希冲突是一个生日悖论问题。在256位散列的情况下,两个输入之间发生冲突的概率完全取决于输入的计数,为:
- 1-(2^256)!/((2^256^inputcount)*(2^256 inputcount)!)或者如其他人所说——对于合理数量的输入,基本上为零
- 如果您的输入集足够小(例如,数据是SSN——不到十亿个),则无冲突是可以验证的:只需彻底测试它
- 如果输入集太大,无法彻底扫描,则预计无法证明是否存在冲突。好的散列函数被期望充当随机预言器,在随机预言器上,如果不进行详尽的尝试,就无法证明这样的属性。能够证明没有碰撞,这看起来可疑地像是该功能的一个弱点
- 其他人指出,碰撞不应成为一个问题;这就是加密安全散列函数的全部要点。我只想补充以下几点:
1-
部分,除非你试图表示没有碰撞的概率。顺便问一下,你能告诉我们这个公式的来源吗?