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#中的标准类型。