【发布时间】:2013-12-03 10:40:26
【问题描述】:
我正在使用 C++11 和 std::hash 算法。 我想知道,使用的是什么实际的哈希实现? 我会假设 MD5 或 SHA,但我无法从互联网上挖掘任何信息。
另外,我想知道哈希的实际返回位宽,因为我必须将它存储在 MySQL 中。
最后,是否最好使用 std::hash,而不是其他一些库,例如 crypto++?
【问题讨论】:
标签: c++ algorithm c++11 hash stdhash
我正在使用 C++11 和 std::hash 算法。 我想知道,使用的是什么实际的哈希实现? 我会假设 MD5 或 SHA,但我无法从互联网上挖掘任何信息。
另外,我想知道哈希的实际返回位宽,因为我必须将它存储在 MySQL 中。
最后,是否最好使用 std::hash,而不是其他一些库,例如 crypto++?
【问题讨论】:
标签: c++ algorithm c++11 hash stdhash
为std::hash 选择的算法完全依赖于实现。可能既不使用 MD5 也不使用 SHA,因为它们会成为性能杀手。
大多数实现将比上述简单得多,因为 std::hash 没有加密要求,而 MD5 和 SHA 已被开发用于加密目的。
std::hash 的 requirements 没有那么严格:
Key 类型的单个参数。size_t 类型的值,表示参数的哈希值。k1 和k2,std::hash<Key>()(k1) == std::hash<Key>()(k2)。k1和k2不相等,std::hash<Key>()(k1) == std::hash<Key>()(k2)的概率应该很小,接近1.0/std::numeric_limits<size_t>::max()。【讨论】:
std::hash 提供的唯一性与密码安全性无关。它的实现主要用于关联无序容器,如 map。该实现不关心加密,它关心用于管理哈希表时的效率。如果您需要加密安全,那么您真的应该指向一个用于该目的的外部库。
std::hash。
boost::uuid。