xxHash 转换导致散列太长

xxHash convert resulting in hash too long

我正在为 C# 使用 xxHash 来散列值以确保一致性。 ComputeHash returns一个byte[],但是我需要把结果存入一个long.

我可以使用 BitConverter 将结果转换为 int32。这是我尝试过的:

var xxHash = new System.Data.HashFunction.xxHash();
byte[] hashedValue = xxHash.ComputeHash(Encoding.UTF8.GetBytes(valueItem));
long value = BitConverter.ToInt64(hashedValue, 0);

当我使用 int 时,它工作正常,但是当我更改为 ToInt64 时,它失败了。

这是我得到的异常:

Destination array is not long enough to copy all the items in the collection. Check array index and length.

BitConverter.ToInt64 期望 hashedValue 有 8 个字节(= 64 位)。您可以手动扩展,然后传递它。

构建 xxHash 对象时,需要提供哈希值:

var hasher = new xxHash(32);

有效的散列大小为 32 和 64。

请参阅 https://github.com/brandondahler/Data.HashFunction/blob/master/src/xxHash/xxHash.cs 了解来源。

添加新答案,因为 Brandon Dahler 的 xxHash 当前实现使用哈希工厂,您可以在其中使用包含哈希大小和种子的配置初始化工厂:

using System.Data.HashFunction.xxHash;

//can also set seed here, (ulong) Seed=234567
xxHashConfig config = new xxHashConfig() { HashSizeInBits = 64 };
var factory = xxHashFactory.Instance.Create(config);
byte[] hashedValue = factory.ComputeHash(Encoding.UTF8.GetBytes(valueItem)).Hash;