4

我正在使用 C++11 和 std::hash 算法。我想知道,使用的是什么实际的哈希实现?我会假设 MD5 或 SHA,但我无法从互联网上挖掘任何信息。

另外,我想知道哈希的实际返回位宽,因为我必须将它存储在 MySQL 中。

最后,是否最好使用 std::hash,而不是其他一些库,例如 crypto++ ?

4

1 回答 1

10

选择的算法std::hash完全依赖于实现。可能既不使用 MD5 也不使用 SHA,因为它们会成为性能杀手。

大多数实现将比上面提到的要简单得多,因为没有加密要求,std::hash而 MD5 和 SHA 是为加密目的而开发的。

要求std::hash那么严格:

  1. 接受一个类型的参数Key
  2. 返回一个size_t表示参数哈希值的类型值。
  3. 调用时不抛出异常。
  4. 对于两个参数k1k2相等,std::hash<Key>()(k1) == std::hash<Key>()(k2)
  5. 对于不相等的两个不同参数k1,应该很小的概率,接近.k2std::hash<Key>()(k1) == std::hash<Key>()(k2)1.0/std::numeric_limits<size_t>::max()
于 2013-11-19T18:21:25.173 回答