A cryptographic hash function, in a nutshell, is a mathematical function which computes a kind of "digital fingerprint" of a sequence of bytes. It's always possibile to compute a fingerprint, even for very long or zero-sized byte sequences (try to hash empty strings with Hash'em all!); however, it's not possible to compute the original data from a given fingerprint. If we change the input sequence in just one bit, the resulting hash will be completely different; but one of the most important mathematical properties of hash functions is that it's very, very difficult to find two different sequences of bytes with the same fingerprint. You can try to hash several different strings with Hash'em all! until you find a collision... if you have much, much time to waste :)
This was a very short introduction to hash functions. Googling you will find plenty of detailed informations about them; but a good start may be Wikipedia:
Why I shall hash something?
You may find Hash'em all! useful mainly for:
- Checksumming. If the hash of a file has changed, you can be sure that the file itself is not the same as the original; this is useful to detect if any error occurred during a file transfer through the web (or between two different storage devices). If you are sending an important file attached to an email, for example, remember to send also its hash/checksum, so that the recipient can check if the file was corrupted during the transfer; it would be a good idea also to checksum important files before and after a transfer between different storage devices (e.g. after copying a file to a pendrive).
Among the algorithms supported by Hash'em all!, CRC32 and Adler32 are pure checksumming algorithms rather than hash functions. You can read more about checksums here.
- Comparing. If two files have different hashes, you can safely say that they are different. Let's suppose, for example, that you would like to know if two image files are the same image or not: it's possibile to check this without even opening them, and with an accuracy much higher than the capabilities of the human eyes. This is useful especially when the files to compare are binary, big and/or in an unknown format; they could even be encrypted, and you can still compare them without knowing the cryptographic key nor the unencrypted content. The hash regards the content of the file and is absolutely independent of the filename: identical files with different names have the same hash value, while files with the same name and different content have different hashes.
- Security. There is a variety of security application of a hash function. You can use it as a very basic cryptographic function, when the range of messages is very limited and a secret is shared with a recipient (like a HMAC, that is a kind of MAC); you can demonstrate that at a certain date you already knew something (e.g. if you send the hash of a word to someone, and only after some time is passed you reveal the original word); you can use it to authenticate with someone you don't want to know the password (but only its hash)...
- Studying. Hash'em all! is free, platfom independent and fast; you can use it as many times as you wish to satisfy your curiosity about the hash functions and their outputs. You may find it interesting especially if you study Computer Science or Mathematics, or if you're developing your own version of a hash function (as a correctness check).