The MD5 functions calculate a 128-bit cryptographic checksum (digest) for any number of input bytes. A cryptographic checksum is a one-way hash-function, that is, you cannot find (except by exhaustive search) the input corresponding to a particular output. This net result is a ``fingerprint'' of the input-data, which doesn't disclose the actual input.
MD2 is the slowest, MD4 is the fastest and MD5 is somewhere in the middle. MD2 can only be used for Privacy-Enhanced Mail. MD4 has been criticized for being too weak, so MD5 was developed in response as ``MD4 with safety-belts''. When in doubt, use MD5.
The
MD5Init(),
MD5Update(), and
MD5Final() functions are the core functions. Allocate an MD5_CTX, initialize it with
MD5Init(), run over the data with
MD5Update(), and finally extract the result using
MD5Final().
MD5End() is a wrapper for
MD5Final() which converts the return value to a 33-character (including the terminating '\0') ASCII string which represents the 128 bits in hexadecimal.
MD5File() calculates the digest of a file, and uses
MD5End() to return the result. If the file cannot be opened, a null pointer is returned.
MD5Data() calculates the digest of a chunk of data in memory, and uses
MD5End() to return the result.
When using
MD5End(),
MD5File(), or
MD5Data(), the
buf argument can be a null pointer, in which case the returned string is allocated with
malloc(3) and subsequently must be explicitly deallocated using
free(3) after use. If the
buf argument is non-null it must point to at least 33 characters of buffer space.