.. | ||
hash.cc | ||
hash.h | ||
legacy_hash.cc | ||
legacy_hash.h | ||
md5_boringssl.cc | ||
md5_boringssl.h | ||
md5_constexpr_internal.h | ||
md5_constexpr.h | ||
md5_nacl.cc | ||
md5_nacl.h | ||
md5.h | ||
README.md | ||
sha1_boringssl.cc | ||
sha1.cc | ||
sha1.h |
Choosing A Hash Function
Note: this document is still very much a work-in-progress. Currently missing:
- recommendations for hashed containers
- recommendations for a better persistent hash
- recommendations for a secure hash
If a hash function with unchanging output is needed, please select from one of the unchanging forever options below.
Non-cryptographic
name | input | output | unchanging forever | notes |
---|---|---|---|---|
Hash() |
overloaded | uint32_t |
no | This function is currently being updated to return size_t . |
PersistentHash() |
overloaded | uint32_t |
yes | Fairly weak but widely used for persisted hashes. |
CityHash64() |
base::span<const uint8_t> |
uint64_t |
yes (note 1) | Version 1.0.3. Has some known weaknesses. |
CityHash64WithSeed() |
base::span<const uint8_t> |
uint64_t |
yes (note 1) | Version 1.0.3. Has some known weaknesses. |
Cryptographic
There are no hashes in //base
that provide cryptographic security.
name | input | output | unchanging forever | notes |
---|---|---|---|---|
MD5String() |
std::string |
std::string |
yes | INSECURE |
SHA1HashString |
std::string |
std::string |
yes | INSECURE |
Deprecated
Note: CRC32, Murmur2, and Murmur3 will be listed here.
Note 1: While CityHash is not guaranteed unchanging forever, the version used in Chrome is pinned to version 1.0.3.