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.
| 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. | 
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 | 
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.