将 64 位数字统一为哈希顺序为 8 位

本文关键字:哈希 顺序 数字 | 更新日期: 2023-09-27 18:18:13

我正在寻找一种哈希算法,当给定 64 位顺序值时,它将均匀哈希为 8 位。

我不想只使用最低有效字节作为哈希值。

将 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等

由于缺乏任何进一步的信息或约束,一种可能性是将所有 8 个字节按位 XOR 放在一起。 对于统一的输入,这将是统一的。

我的 C# 生锈了,但在伪代码中:

byte hash = 0;
for (int i = 0; i < 8; i++) {
    hash ^= (byte)(val >> (i*8));
}