C# C语言的快速哈希算法#

C# C语言的快速哈希算法#,c#,hash,C#,Hash,我正在寻找一种快速散列算法,它不用于加密,但比标准的GetHashCode()覆盖范围更广 我已经看到了CityHash,但看不到C#port 理想情况下,我希望指定哈希大小(64位、128位等),但这不是一个要求 有什么想法吗?您可以尝试以下方法: 对于64位哈希 bit Data[64*L] ; // Your input filled to be divided by 64 bit Arr[64] ; // eg. initially filled with '0' for(in

我正在寻找一种快速散列算法,它不用于加密,但比标准的
GetHashCode()
覆盖范围更广

我已经看到了
CityHash
,但看不到C#port

理想情况下,我希望指定哈希大小(64位、128位等),但这不是一个要求


有什么想法吗?

您可以尝试以下方法: 对于64位哈希

bit Data[64*L] ; // Your input filled to be divided by 64 
bit Arr[64] ;    // eg. initially filled with '0' 
for(int k=0 ; k<L ; k++){
    for(int i=0 ; i<64 ; i++){
        Arr[i]=Arr[i]^data[k*64+i];  // '^' as the XOR operator
    }
}
位数据[64*L];//您的输入被填充为除以64
位Arr[64];//例如,最初填充为“0”
对于(int k=0;kCityHash C#port

用法:

using CityHash;

ulong hash = "...".GetCityHash64();
您需要从主项目中添加对CyyHas.dLL的引用,并确保从项目的C++部分构建的CITYHASH.WI32.DLL可以在项目的bin文件夹中使用。 对我来说,使用git是一个很大的麻烦-我不想在我的bin文件夹中签入任何东西。因此,我将Win32 dll放在我的lib文件夹中,并添加了此预构建事件:

start /MIN xcopy /y /c lib\CityHash.Win32.dll bin
这确保了它可以复制,即使是对于刚克隆和构建的人,也不必从.gitignore列表中删除bin文件夹


注意到,我可以告诉您,CyyHASH的C++部分将不会在VisualStudio调试中生成发布模式。

“更好的覆盖”是什么意思??这将用于什么?您的数据是如何分布的?您是否希望合理地确保类似的输入将提供非常不同的输出?重复:因此您不打算覆盖
GetHashCode()
用于您自己的实现,但用于其他用途?您在散列什么?如果不知道要散列什么,如何按值散列?我很想建议您使用Random进行散列。这当然提供了很好的覆盖范围。
bit
不是C#中的标准类型。