C#的快速哈希算法

时间:2012-05-28 14:27:41

标签: c# hash

我正在寻找一种不用于加密的快速哈希算法,但是比标准GetHashCode()更能覆盖我。

我见过CityHash,但看不到C#端口。

理想情况下,我想指定散列大小(64位,128位等),但这不是必需的。

有什么想法吗?

2 个答案:

答案 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位快速高效的哈希值。