暗号化には使用されませんが、標準よりも優れたカバレッジを提供するクイック ハッシュ アルゴリズムを探していますGetHashCode()
。
見CityHash
ましたが、C# ポートが表示されません。
理想的には、ハッシュ サイズ (64 ビット、128 ビットなど) を指定したいのですが、これは必須ではありません。
何か案は?
シティハッシュ C# ポート
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 のリリース モードではビルドされないことに注意してください - デバッグのみ。
次のようなものを試すことができます: 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 ビットの高速で効率的なハッシュを取得します。