我正在寻找一种不用于加密的快速哈希算法,但是比标准GetHashCode()
更能覆盖我。
我见过CityHash
,但看不到C#端口。
理想情况下,我想指定散列大小(64位,128位等),但这不是必需的。
有什么想法吗?
答案 0 :(得分:1)
CityHash C#port
https://github.com/gmarz/CityHash
用法:
using CityHash;
ulong hash = "...".GetCityHash64();
您需要从主项目添加对CityHash.dll的引用,并确保从项目的C ++部分构建的CityHash.Win32.dll在项目的bin文件夹中可用。
对我来说,使用git,这是一个很大的麻烦 - 我不想在我的bin文件夹中检查任何内容。所以,我将Win32 dll放在我的lib文件夹中并添加了这个预构建事件:
start /MIN xcopy /y /c lib\CityHash.Win32.dll bin
确保它可以复制,即使对于刚刚克隆和构建的人也是如此,而无需从.gitignore列表中取出bin文件夹。
另请注意,据我所知,CityHash的C ++部分不会在Visual Studio中的发布模式下构建 - 仅限调试。
答案 1 :(得分:-2)
您可以尝试这样的事情: 对于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
}
}
Arr []将获得64位快速高效的哈希值。