A hash function is a mathematical function that converts a numerical input value into another compressed numerical value.
The input to the hash function is of arbitrary length but the output is always of fixed length.
To put it simply, a hash function takes a group of characters and maps it to a value of certain length.
That is to say, for any x input value, you will always receive the same y output value whenever the hash function is run.
f(x) = y
This means every input has a determined output.
The hash value represents the original string of characters but is usually smaller than the original.
Hash functions are very useful and are used in almost all information security applications we use today.
For example, hashing is done for indexing and locating items in databases because it is easier to find the shorter hash value than the longer original string.
Hashing is also used in encryption.
A hash function is also called, a hashing algorithm or message digest function.
The value that you get after processing a set of data through a hash function is called a hash value or sometimes is commonly called a message digest.
Note that the input can be any data like numbers, files and other types of files.
The process of transforming a given set of data to a specific hash value is called hashing the data.
The hash value or message digest is always in form of a hexadecimal number.
For example:
md5(“kifanga”) = fd0c1650d6b63df20911c429a9d70817
 Check out : md5 hash generator.
The resulting value after hashing is much smaller compared to the data that passed through the function. This makes hash functions to act as a kind of compression functions.
 Read: The complete list of ciphers.
One advantage of hash functions over normal ciphers techniques is that they are super fast and the resulting output is smaller too.
Hashes are supposed to be oneway functions and irreversible.
Also, a hash function should not result in the same value for two different pieces of information.
When two different pieces of data result to the same hash value, in that case, a hash collision has occurred and the function is not fit for use.
Here are different types of hashing algorithms and methods in cryptography.
List of hash functions
A list of Keyed cryptographic hash functions

VMAC
This is a block cipher that is based on message authentication code (MAC). This algorithm was proposed by Ted Krovertz and Wei Dai in 2007.

UMAC
This is also a message authentication code (MAC) that is calculated by choosing a hash function from a class of hash functions according to a random method and applying it to the message.

BLAKE2
This is based on Dan Bernstein’s Chacha stream cipher with a slight permutation on the input block. This is a type of cryptographic hash function that goes up to 512 bits and it’s based on the keyed hash function (prefixMAC).

Poly1305AES
Uses AES block cipher to expand the key. This is a type of cryptographic message code with 128 bits and it’s noncebased.

SipHash
This is a 64 bits pseudorandom function based on noncollisionresistant PRF.

Onekey MAC
This is constructed from a block cipher. They are of two types (OMAC1 and OMAC2).

PMAC
It works by taking a block cipher and creating a good MAC that is reducible insecurity to the underlying block cipher. It is very similar to the OMAC algorithm.

MD6
This is a 512 bits cryptographic hash function based on Merkle tree NLFSR.

HMAC
Hashbased message authentication code is a type of MAC that uses a cryptographic hash function and a secret key.
A list of unkeyed cryptographic hash functions

BLAKE256
This is a 256 bits hash function based on HAIFA structure.

BLAKE512
This is a 512 bits hash function based on HAIFA structure.

BLAKE2s
This is a type of cryptographic hash function that goes up to 256 bits and it’s based on HAIFA structure.

BLAKE2b
This is a type of cryptographic hash function that goes up to 512 bits and it’s based on HAIFA structure.

ECOH
This is a type of hash that has a range of 224 to 512 bits.

FSB
This is a type of hash that has a range of 160 to 512 bits.

GOST
This is a 256 bits hash.

Grostl
This is a type of hash that goes up to 512 bits.

HAS160
This is a 160 bits hash.

HAVAL
This is a type of hash that has a range of 128 to 256 bits.

JH
This is a type of hash that has a range of 224 to 512 bits.

MD2
This is a 128 bits hash.

MD4
This is a 128 bits hash.

MD6
This is a type of cryptographic hash function that goes up to 512 bits and it’s based on Merkle tree NLFSR.

MD5
This is a 128 bits hash function based on Merkle–Damgård construction.

RadioGatún
This is a type of hash that goes up to 1216 bits.

RIPEMD
This is a 128 bits hash.

RIPEMD128
This is also a 128 bits hash.

RIPEMD160
This is a 160 bits hash.

RIPEMD320
This is a 320 bits hash.

Snefru
This is a type of hash that has a range of 128 to 256 bits.

SWIFFT
This is a 512 bits hash.

Whirlpool
This is also a 512 bits hash.

SHA1
This is a 160 bits hash function based on Merkle–Damgård construction.

SHA224
This is a 224 bits hash function also based on Merkle–Damgård construction.

SHA256
This is a 256 bits hash function based on Merkle–Damgård construction.

SHA384
This is a 384 bits hash function based on Merkle–Damgård construction.

SHA512
This is a 512 bits hash function based on Merkle–Damgård construction.

SHA3(Keccak)
This is a hash function based on Sponge function and has an arbitrary bits length.

Streebog
This is a type of cryptographic hash function that ranges from 256 to 512 bits and it’s based on Merkle–Damgård construction.

Tiger
This is a 192 bits hash function based on Merkle–Damgård construction.

Skein
This is a cryptographic hash function based on Unique Block Iteration and has an arbitrary bits length.

Spectral Hash
This is a 512 bits hash function based on Wide pipe Merkle–Damgård construction.
A list of Cyclic redundancy checks

BSD checksum
This is a 16 bits errordetecting code.

Checksum
This is a 32 bits errordetecting code.

CRC16
This is also a 16 bits errordetecting code as the name suggests.

CRC32
This is a 32 bits errordetecting code.

CRC32 MPEG2
This is a 32 bits errordetecting code.

CRC64
This is a 64 bits errordetecting code.

SYSV checksum
This is a 16 bits errordetecting code.
A list of Checksums

Sum(Unix)
This is a 16 or 32 bits checksum algorithm.

Sum8
This is an 8 bits checksum algorithm.

Sum16
This is a 16 bits checksum.

Sum24
This is a 24 bits checksum algorithm.

Sum32
This is a 32 bits checksum algorithm.

Fletcher4
This is a 4 bits checksum.

Fletcher8
This is an 8 bits checksum.

Fletcher16
This is a 16 bits checksum.

Fletcher32
This is a 32 bits checksum.

Adler32
This is a 32 bits checksum algorithm.

Xor8
This is an 8 bits checksum.

Luhn algorithm
This is a 1 decimal digit checksum algorithm.

Verhoeff algorithm
This is also a 1 decimal digit checksum.

Damm algorithm
This is a 1 decimal digit error detection algorithm based on Quasigroup operation
A list of Noncryptographic hash functions
This is an 8 bits (and more) hash function based on XOR/table.
This is a 32 bits hash function.

Buzhash
This is a hash function based on XOR/table and has a variable bits length.
This is a noncryptographic hash function based on xor/product or product/XOR and has (32, 64, 128, 256, 512, or 1024 bits) lengths.
This is a noncryptographic hash function based on XOR/addition and has (32 or 64 bits) lengths.
This is a 32 bits noncryptographic hash.
This is also a 32 bits noncryptographic hash.
This is a 32 or 64 bits hash.
This is a noncryptographic hash function based on product/rotation and has (32, 64, or 128 bits) lengths.
This is a noncryptographic hash function based on Xorshift operations and has (32, 64 bits) lengths.
This is a 32, 64, or 128 bits noncryptographic hash.
This is a 64, 128, or 256 bits noncryptographic hash.
This is a 32, 64 or 128 bits noncryptographic hash.
This is a 64 or 128 bits noncryptographic hash.
This is a noncryptographic hash function based on Division/Modulo and has a variable bits length.
This is a noncryptographic hash function based on product/rotation and has a 32 or 64 bits length.
This is a noncryptographic hash function based on product/permutation and has a 64, 128, or 256 bits length.
This is a noncryptographic hash function based on product/rotation/XOR/add and has a 64 and 128 bits length.
A list of Universal hash function families

Zobrist hashing
This is a cryptographic hash function based on XOR and has a variable bits length.

Universal oneway hash function
This is a hash function that acts as an alternative to collisionresistant hash functions (CRHFs).

Tabulation hashing
This is a hash function based on XOR and has a variable bits length.

Rabin fingerprint
This is a hash based on multiple and has a variable bits length.
A list of other hash functions
This is a 32 or 64 bits cryptographic hash.
This is a 256, 384 or 512 bits hash.
This is a 256 or 512 bits hash.
This is a 256 or 512 bits hash.
This is a 81, 82, 84, 88, 161, 162, 164, 168 or 512 bits cryptographic hash.

Echo
This is a 256 or 512 bits hash.

Echosp hash function
This is a 256 or 512 bits cryptographic hash.

Edonr hash function
This is a 256 or 512 bits hash.

Essence
This is a 224, 256, 384 or 512 bits hash.

Fugue
This is a 2, 256, 384 or 512 bits hash.

Hamsi
This is a 256 or 512 bits hash.

Lane
This is a 256 or 512 bits hash.

Luffa
This is a 256, 384 or 512 bits hash.

Lux
This is a 256 or 512 bits hash.

Mcssha (4, 5 or 6)
This is a 512 bits hash.

Nasha
This is a 256 or 512 bits hash.

RFSB509
This hash uses SHA256 as an output filter.

Round3jh
This is a 256 or 512 bits cryptographic hash.

Sarmal
This is a 256 or 512 bits cryptographic hash.

Shabal
This is a 256 or 512 bits hash.

Shake
This is a 128 or 256 bits cryptographic hash.

Shavite (3256, 3512)
This is a 256 or 512 bits hash.

Simd
This is a 256 or 512 bits cryptographic hash.
Features of Hash Functions
Here are two features of hash functions

Fixed length output (hash value)
Any hash function should be able to convert data of arbitrary length to a fixed length. This process is called hashing of data.
The hash value is often smaller than the input data, thus making hash functions to act as compression functions.
The hash value is a smaller representation of a larger data often called a digest. Most hash functions generate values between 160 and 512 bits.

Efficiency of operation
For any hash function when given input x, the computation of the hash value should be very fast. Normally symmetric encryption is much faster than computationally hash functions.
Properties of hash functions
Here are three properties of hash functions

PreImage Resistance
This simply means that is should be very hard to reverse a hash function.
For example of a hash function k produces a hash value of p, then it should be a difficult process to find any input value y that hashes to p.
The importance of this property is to prevent an attacker who only has a hash value and is trying to find the input.

Second PreImage Resistance
This means that, given an input and its hash, it should be very hard to find a different input with the same hash.
For example, if a hash function k for an input x produces hash value k(x), then it should be hard to find any other input value y such that k(y) = k(x).
The importance of this property is to protect against an attacker who has an input value and its hash and wants to substitute different value as a legitimate value in place of the original input value.

Collision Resistance (collisionfree hash function)
This means it should be hard to find two different inputs of any length that result in the same hash.
For example, for a hash function k, it should be hard to find any two different inputs x and y such that k(x) = k(y).
The fact that a hash function is a compressing function with fixed hash length, it is very hard not to have collisions.
The importance of this property is to make it hard for an attacker to find two input values with the same hash.
Design of hashing algorithms
The Merkle–Damgård construction or Merkle–Damgård hash function is the most common method of building collisionresistant cryptographic hash functions from collisionresistant oneway compression functions.
How are cryptographic hash functions used
Here are five applications of hash functions in today’s technology:
 Hashing is used with a database to enable items to be retrieved more efficiently. Often used for password storage.
 Hashing is also used in the encryption and decryption of digital signatures.
 A hash function is used in folding, taking an original value, dividing it into several parts, then adding the parts and using the last four remaining digits as the hashed value or key.
 It’s also used in digital rearrangement, taking the digits in certain positions of the original value, such as the third and sixth numbers, and reversing their order, then using the number left over as the hashed value.
 Data integrity check used to generate the checksums on data files. This provides assurance to users about the correctness of the data.
Popular hash functions
Here are five wellknown hash functions in use today:
 Hashed Message Authentication Code (HMAC): Combines authentication via a shared secret with hashing.
 Message Digest 2 (MD2): Byteoriented, produces a 128bit hash value from an arbitrarylength message, designed for smart cards.
 MD4: Similar to MD2, designed specifically for fast processing in software.
 MD5: Similar to MD4 but slower because the data is manipulated more. Developed after potential weaknesses were reported in MD4.
 Secure Hash Algorithm (SHA): Modeled after MD4 and proposed by NIST for the Secure Hash Standard (SHS), produces a 160bit hash value.
Characteristics of a Good Hash Function
Here are four main characteristics of a good hash function:
 The hash value should be fully determined by the data being hashed.
 The hash function should use all the input data.
 The hash function should uniformly distribute the data across the entire set of possible hash values.
 The hash function should generate very different hash values for similar strings.
Now I want to hear from you.
What do you think of this guide?
Or maybe I missed an important aspect of hash functions.
Either way, let me know by leaving a comment below.