files/en-us/glossary/hash_function/index.md
A hash function is a function that takes a variable-length input and produces a fixed-length output, also called a digest (or just a "hash"). Hash functions should be quick to compute, and different inputs should as far as possible produce different outputs (this is called collision-resistance).
Hash functions have both {{glossary("cryptography", "cryptographic")}} and non-cryptographic uses. Outside cryptography, for example, hash functions can be used to generate the keys for an associative array such as a map or a dictionary.
The {{domxref("SubtleCrypto.digest()", "digest()")}} function of the {{domxref("SubtleCrypto")}} interface makes various hash functions available to web applications.
In cryptography, hash functions have many applications, including {{Glossary("digital signature", "digital signatures")}}, and {{Glossary("HMAC", "message authentication codes")}}.
Not all hash functions are appropriate for cryptography. To be used for cryptography, a hash function must be:
The hash functions most commonly used in cryptography are from the SHA-2 (Secure Hash Algorithm 2) family, whose names are "SHA-" followed by the length of the output digest in bits: for example, "SHA-256" and "SHA-512".
SHA-2 is the successor to the SHA-1 algorithm, which is no longer considered secure and should not be used in cryptography. Note that the MD5 algorithm is also considered insecure.