我正在寻找一种哈希算法,当给定一个 64 位顺序值时,该算法将统一哈希为 8 位。
我不想只使用最低有效字节作为哈希值。
最佳答案
作为 Oli Charlesworth 解决方案的一般情况,您可以选择与 256 互质,并将输入的每个字节预乘以该值,然后将所有值XOR
在一起。您仍然会得到均匀分布,但对于顺序输入,您会得到非顺序输出,例如:
byte result = 0;
int q = 33149;
foreach (byte b in BitConverter.GetBytes(input)) result += (byte)(b * q);
对于 1, 2, 3, 4, 5, 6, ... 它会得到 125, 250, 119, 244, 113, 238, 等等
关于c# - 将连续的 64 位数字统一哈希为 8 位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8546155/