Properties of a HASH function H
1.H can be applied to a block of data of any size
2.H produces a fixed length output
3.H(x) is easy to compute for any given x.
4.For any given code h, it is computationally infeasible to find x such that H(x) = h
5.For any given block x, it is computationally infeasible to find with H(y) = H(x).
6.It is computationally infeasible to find any pair (x, y) such that H(x) = H(y)