0

我正在寻找一种快速散列算法,它不用于密码学,但给我比标准更好的覆盖率GetHashCode()

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

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

有任何想法吗?

4

2 回答 2

1

CityHash C# 端口

https://github.com/gmarz/CityHash

用法:

using CityHash;

ulong hash = "...".GetCityHash64();

您需要从主项目添加对 CityHash.dll 的引用,并确保从项目的 C++ 部分构建的 CityHash.Win32.dll 在项目的 bin 文件夹中可用。

对我来说,使用 git 是个大麻烦——我不想检查 bin 文件夹中的任何内容。因此,我将 Win32 dll 放在我的 lib 文件夹中并添加了这个 Pre-build 事件:

start /MIN xcopy /y /c lib\CityHash.Win32.dll bin

这确保了它可以复制,即使对于刚刚克隆和构建的人,也不必将 bin 文件夹从 .gitignore 列表中删除。

另请注意,据我所知,CityHash 的 C++ 部分不会在 Visual Studio 的发布模式下构建 - 仅限调试。

于 2013-10-31T06:19:26.497 回答
-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 位快速高效的哈希。

于 2012-05-28T14:49:37.273 回答