The MD4 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
MD4Init(),
MD4Update(), and
MD4Final() functions are the core functions. Allocate an MD4_CTX, initialize it with
MD4Init(), run over the data with
MD4Update(), and finally extract the result using
MD4Final().
MD4End() is a wrapper for
MD4Final() which converts the return value to a 33-character (including the terminating '\0') ASCII string which represents the 128 bits in hexadecimal.
MD4File() calculates the digest of a file, and uses
MD4End() to return the result. If the file cannot be opened, a null pointer is returned.
MD4Data() calculates the digest of a chunk of data in memory, and uses
MD4End() to return the result.
When using
MD4End(),
MD4File(), or
MD4Data(), 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.