4

私は C++11 と std::hash アルゴリズムを使用しています。私は、実際にどのハッシュ実装が使用されているのだろうかと思っていました。MD5 または SHA だと思いますが、インターネットから情報を掘り下げることはできません。

また、MySQL に格納する必要があるため、実際に返されるハッシュのビット幅を知りたいです。

最後に、 crypto++ などの他のライブラリよりも std::hash を使用することをお勧めしますか?

4

1 に答える 1

10

に選択されるアルゴリズムは、std::hash実装のみに依存します。おそらく、MD5 も SHA も使用されていません。これらは、その目的のためにパフォーマンス キラーになるからです。

std::hashMD5 と SHA は暗号化の目的で開発されているため、暗号化の要件がないため、ほとんどの実装は上記よりもはるかに簡単です。

要件std::hashはそれほど厳密ではありません。

  1. type の 1 つのパラメーターを受け入れますKey
  2. size_tパラメータのハッシュ値を表す型の値を返します。
  3. 呼び出されたときに例外をスローしません。
  4. 2 つのパラメーターk1k2が等しい場合、std::hash<Key>()(k1) == std::hash<Key>()(k2).
  5. 等しくない2 つの異なるパラメーターk1の場合、確率は非常に小さくなり、 に近づきます。k2std::hash<Key>()(k1) == std::hash<Key>()(k2)1.0/std::numeric_limits<size_t>::max()
于 2013-11-19T18:21:25.173 に答える