Hash functions are mathematical algorithms that take an input (or 'message') and return a fixed-size string of bytes. The output, typically a 'digest', appears random, but it is unique to each unique input. In computational terms, even a small change in input will produce a significantly different hash.