ptypes

ptypes Mercurial Source Tree


Root/doc/streams.md5.html

<html><!-- #BeginTemplate "/Templates/tmpl.dwt" --><!-- DW6 -->
<head>
<!-- #BeginEditable "doctitle" --> 
<title>PTypes: streams: outmd5</title>
<!-- #EndEditable --> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" href="styles.css">
</head>
<body bgcolor="#FFFFFF" leftmargin="40" marginwidth="40">
<p><a href="../index.html"><img src="title-21.png" width="253" height="39" alt="C++ Portable Types Library (PTypes) Version 2.1" border="0"></a> 
<hr size="1" noshade>
<!-- #BeginEditable "body" --> 
<p class="hpath"><a href="index.html">Top</a>: <a href="streams.html">Streams</a>: 
outmd5 </p>
<blockquote> 
<pre class="lang">#include <pstreams.h>

class outmd5: outstm {
    outmd5();
    outmd5(outstm* outthru);
    string get_digest();
    const unsigned char* get_bindigest();
}
</pre>
</blockquote>
<p>MD5, the message digest algorithm described in RFC 1321, computes a 128-bit 
sequence (sometimes called 'message digest', 'fingerprint' or 'MD5 checksum') 
from arbitrary data. As stated in RFC 1321, 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. MD5 can be viewed 
as a one-way encryption system and can be used, for example, to encrypt passwords 
in a password database.</p>
<p>The MD5 fingerprint is more often converted to so-called ASCII-64 form in order 
to conveniently store it in plain text environments and protocols. Thus, the 128-bit 
binary sequence becomes a 22-character text string consisting of letters, digits 
and two special symbols '.' and '/'. (Note that this is not the same as Base64 
encoding in MIME).</p>
<p>In order to compute a MD5 fingerprint you first create a stream object of type 
<span class="lang">outmd5</span> and then send data to it as if it was an ordinary 
output file or a socket stream. After you close the stream, you can obtain the 
fingerprint in ASCII-64 form using the object's <span class="lang">get_digest()</span> 
method.</p>
<p>The implementation of MD5 is derived from L. Peter Deutsch's work.</p>
<p>This class derives all public methods and properties from <a href="streams.iobase.html">iobase</a> 
and <a href="streams.outstm.html">outstm</a>, and in addition defines the following:</p>
<p><span class="def">outmd5::outmd5()</span> creates a bufferless MD5 stream.</p>
<p><span class="def">outmd5::outmd5(outstm* outthru)</span> creates a MD5 stream 
and attaches an output stream <span class="lang">outthru</span> to it. Everything 
sent to the MD5 stream will also be duplicated to <span class="lang">outthru</span>. 
You may want, for example, to attach <span class="lang">perr</span> to your MD5 
stream for debugging purposes.</p>
<p><span class="def">string outmd5::get_digest()</span> closes the stream and 
returns the computed fingerprint in text form (ASCII-64).</p>
<p><span class="def">const unsigned char* outmd5::get_bindigest()</span> closes 
the stream and returns a pointer to a 16-byte buffer with the binary MD5 fingerprint.</p>
<p><b>Example:</b></p>
<blockquote> 
<pre>
string cryptpw(string username, string password)
{
    outmd5 m;
    m.open();
    m.put(username);
    m.put(password);
    m.put("Banana with ketchup");
    return m.get_digest();
}
</pre>
</blockquote>
<p class="seealso">See also: <a href="streams.iobase.html">iobase</a>, <a href="streams.outstm.html">outstm</a> 
</p>
<!-- #EndEditable -->
<hr size="1">
<a href="../index.html" class="ns">PTypes home</a>
</body>
<!-- #EndTemplate --></html>
Source at commit 8edbcdac0d39 created 11 years 8 months ago.
By Nathan Adams, initial commit

Archive Download this file

Branches

Tags

Page rendered in 0.74360s using 11 queries.