In practical computer science hashing is a very important
concept. It is used from simple data structures (like hash
maps), highly complex
data structures (like bloom
filters or hyperloglog
counters), database
indices
and
sharding,
storage and communication
integrity, distributed
storage, most
password
authentication and storage mechanisms, digital
signatures, other
cryptographic constructs based on Merkle
trees (including Git or
digital ledgers), and
possibly many other use-cases I'm not even aware of right now.
However, not every hash algorithm is appropriate in all of these
scenarios, and in fact, very few algorithms are usable in more than
a couple of situations. Even worse, using the wrong algorithm will
lead in the best case scenario to performance problems, but in the
worst case scenario to security issues and even financial
loss. Thus, knowing which algorithm to pick for which application is
crucial.
Therefore I'll try to summarize how I approach the topic of hashing,
including use-cases, recommended algorithms, and links to other
articles.