【发布时间】:2019-12-13 13:30:04
【问题描述】:
在https://preshing.com/20110504/hash-collision-probabilities/ 的“小碰撞概率”部分,您可以看到取决于散列值大小的权衡取舍。而是 32 位或 160 位哈希取决于您的用例和限制。
在给定整数 n 的情况下,如何构造 n 位的校验和/哈希?
这个想法是哈希函数的调用者可以确定适合他们需要的权衡(只想存储整数而不关心冲突,使用 32 位等)。
冲突概率应该与相同位长的典型哈希函数相当(给定 n = 160,冲突概率接近 sha-1。给定 n = 32,冲突概率接近crc-32)
我的尝试:
if n < 160, sha-1(input) truncate first bits to bit-size n.
if n = 160, sha-1(input)
if n > 160, sha-1(input) & sha-1(input) [Repeat concatenation (n % 160) times and then truncate bits to n)
我意识到对于n > 160,我的冲突概率并没有降低,因为它执行相同的哈希。也不需要 sha-1,因为我的目的本质上不是加密的,更多的是校验和
【问题讨论】:
标签: c# algorithm hash checksum