\section{\module{md5} ---
         MD5 message digest algorithm}

\declaremodule{builtin}{md5}
\modulesynopsis{RSA's MD5 message digest algorithm.}

\deprecated{2.5}{Use the \refmodule{hashlib} module instead.}

This module implements the interface to RSA's MD5 message digest
\index{message digest, MD5}
algorithm (see also Internet \rfc{1321}).  Its use is quite
straightforward:\ use \function{new()} to create an md5 object.
You can now feed this object with arbitrary strings using the
\method{update()} method, and at any point you can ask it for the
\dfn{digest} (a strong kind of 128-bit checksum,
a.k.a. ``fingerprint'') of the concatenation of the strings fed to it
so far using the \method{digest()} method.
\index{checksum!MD5}

For example, to obtain the digest of the string \code{'Nobody inspects
the spammish repetition'}:

\begin{verbatim}
>>> import md5
>>> m = md5.new()
>>> m.update("Nobody inspects")
>>> m.update(" the spammish repetition")
>>> m.digest()
'\xbbd\x9c\x83\xdd\x1e\xa5\xc9\xd9\xde\xc9\xa1\x8d\xf0\xff\xe9'
\end{verbatim}

More condensed:

\begin{verbatim}
>>> md5.new("Nobody inspects the spammish repetition").digest()
'\xbbd\x9c\x83\xdd\x1e\xa5\xc9\xd9\xde\xc9\xa1\x8d\xf0\xff\xe9'
\end{verbatim}

The following values are provided as constants in the module and as
attributes of the md5 objects returned by \function{new()}:

\begin{datadesc}{digest_size}
  The size of the resulting digest in bytes.  This is always
  \code{16}.
\end{datadesc}

The md5 module provides the following functions:

\begin{funcdesc}{new}{\optional{arg}}
Return a new md5 object.  If \var{arg} is present, the method call
\code{update(\var{arg})} is made.
\end{funcdesc}

\begin{funcdesc}{md5}{\optional{arg}}
For backward compatibility reasons, this is an alternative name for the
\function{new()} function.
\end{funcdesc}

An md5 object has the following methods:

\begin{methoddesc}[md5]{update}{arg}
Update the md5 object with the string \var{arg}.  Repeated calls are
equivalent to a single call with the concatenation of all the
arguments: \code{m.update(a); m.update(b)} is equivalent to
\code{m.update(a+b)}.
\end{methoddesc}

\begin{methoddesc}[md5]{digest}{}
Return the digest of the strings passed to the \method{update()}
method so far.  This is a 16-byte string which may contain
non-\ASCII{} characters, including null bytes.
\end{methoddesc}

\begin{methoddesc}[md5]{hexdigest}{}
Like \method{digest()} except the digest is returned as a string of
length 32, containing only hexadecimal digits.  This may 
be used to exchange the value safely in email or other non-binary
environments.
\end{methoddesc}

\begin{methoddesc}[md5]{copy}{}
Return a copy (``clone'') of the md5 object.  This can be used to
efficiently compute the digests of strings that share a common initial
substring.
\end{methoddesc}


\begin{seealso}
  \seemodule{sha}{Similar module implementing the Secure Hash
                  Algorithm (SHA).  The SHA algorithm is considered a
                  more secure hash.}
\end{seealso}
