私はMD5 JAVAメソッドから16バイトの配列を持っています。 これをlongに変換して、ハッシュキーとして使用したいと考えています。 64ビットをビットごとに排他的論理和(XOR)で読むのは良いアイデアです。 XORとcvtの完全なコード例は長くお願いします。MD5をロングに変換する
答えて
私が見つけた最高のソリューション(スピードと優れたハッシュ関数の私のニーズに基づいて...ミックス)は、GoogleのCityHashです。入力はMD5結果を含む任意のバイト配列で、出力は符号なし64ビット長です。
CityHashは非常に良いではなく、完全なハッシュ分布を有し、かつ非常に高速です。
私は半分の時間でのC#にC++からCityHashを移植しました。 Javaポートも簡単にする必要があります。 (確かにそれは非常に高速になりますが)
ちょうどビットをXORすることなど良好な分布を与えるものではありません。
私はバイト配列から長いものをどのように埋め込むのかを正確に伝えるためにJavaにはあまりよく慣れていません(よく分からないヘルパーかもしれませんが、Javaの誤った算術の詳細を得ることもできます)。私はendiannessに対処する試みがなされていない
long a = md5[0] * 256 * md5[1] + 256 * 256 * md5[2] + 256 * 256 * 256 * md5[3];
long b = md5[4] * 256 * md5[5] + 256 * 256 * md5[6] + 256 * 256 * 256 * md5[7];
long result = a^b;
注:基本的に、しかし、あなたはこのような何かをしたいでしょう。しかし、一貫したハッシュ値を気にするだけであれば、エンディアンは重要ではありません。
CityHashは、javaで利用できないSSE4拡張を広範に使用しています。 –
@Alan:C#でもafaikでも利用できませんが、C#のバージョンはC#からC++バージョンを呼び出すほど正確です(SSE4の喪失は、譲渡や譲渡よりも高価ではありません)。 –
あなたは[グアバのハッシュ]をご覧ください(https://code.google.com/p/guava-libraries/source/browse/guava/src/com/google/common/hash/Hashing.java?name=refs/リモート/ gcode-clone/cityhash) –
だけ、暗号ダイジェストがもはや特にこれらの特性がもはや保持、ダイジェストの暗号特性の多くを有する任意のサブセクション明確にする:
- 反転抵抗(Hを満たすXを求めます( X))
- 衝突抵抗(Xを求める、Yそのようなグアバそう有する
可能な出力の範囲にわたって、H(X)= H(Y))
Hashing.md5().hashString(s).asLong();
私は上記の実際CityHashですが、関係なく、それはあなたがどんなあなたのハッシュニーズに使用できるハッシュlong型が生成されます信じています。 (私は@Eric J. Javaコードを試しましたが、CityHash 32のように見えます)。
- 1. 入力(パスワード)をMD5に変換する
- 2. MD5ハッシュベース64変換
- 3. HICONを符号なしロングに変換する
- 4. 角2の変換文字列をmd5に変換
- 5. jqueryのパスワードをmd5に変換するには?
- 6. SSRS - 今日から60日を引いてロングに変換
- 7. MD5/SHA1ハッシュをバイナリから16進のダイジェストに変換する
- 8. ガーベジ・ロング・ロング・ロング・データ型
- 9. データフレームをワイドからロングに変換してマップを適用する(Python 3.5.1 Pandas)
- 10. ColdFusion for CloudTraxへのPHP md5の変換
- 11. ロング+ロングはLong.MAX_VALUE
- 12. 目的C奇数小数点からロング変換への変換
- 13. md5 cantファイル名のエンティティを変換する
- 14. HEXのMD5からbase64へのエンコーディングを変換する
- 15. 式は、画像内のX&Yに緯度とロング変換すること
- 16. MD5変換してテキストに戻します
- 17. MD5ハッシュをIonicのアレイバッファに変換できません
- 18. 時間効率の良いワイドからロングへの変換パンダ
- 19. 変換バイト[]符号なしロングJavaへの配列
- 20. md5の値を対応するSHA1とSHA256のpythonに変換しますか?
- 21. パスワードをmd5からlaravelの暗号化方法に変換する方法
- 22. ロング・ダブルをJavaに置き換えていますか?
- 23. 形状変更を使用してワイドからロングに変換する際の問題?
- 24. 無効にロング
- 25. データフレームをワイドからロングに変更する
- 26. R:データをワイドからロングに変換する - 複数の条件 - エラーが発生する
- 27. データタイプ:ロング
- 28. ロング&異なるアーキテクチャー
- 29. ロング値をアンドロイドデータベースに保存
- 30. IPアドレスをiOSの符号なしロング整数からドット構文に変換する
あなたはXORルートを取っていた場合は、残りの半分を持つだけでXOR半分のバイトと思い、長い長さ16バイト配列であるの半分のビット数である64ビットであるため。より具体的には、8つの最上位バイトと8つの最下位バイトを排他的論理和(XOR)できます。 –