This document describes the MD5 message-digest algorithm. The
algorithm takes as input a message of arbitrary length and
produces as output a 128-bit "fingerprint" or "message digest"
of the input. It is conjectured that it is computationally
infeasible to produce two messages having the same message
digest, or to produce any message having a given prespecified
target message digest. The MD5 algorithm is intended for digital
signature applications, where a large file must be "compressed"
in a secure manner before being encrypted with a private
(secret) key under a public-key cryptosystem such as RSA. The
MD5 algorithm is designed to be quite fast on 32-bit machines.
In addition, the MD5 algorithm does not require any large
substitution tables; the algorithm can be coded quite compactly.
The MD5 algorithm is an extension of the MD4 message-digest
algorithm 1,2]. MD5 is slightly slower than MD4, but is more
"conservative" in design. MD5 was designed because it was felt
that MD4 was perhaps being adopted for use