📄 rfc1321---md5报文摘要算法--中文版.htm
字号:
<P>#if MD == 2<BR>#define MD_CTX MD2_CTX<BR>#define MDInit MD2Init<BR>#define
MDUpdate MD2Update<BR>#define MDFinal MD2Final<BR>#endif<BR>#if MD ==
4<BR>#define MD_CTX MD4_CTX<BR>#define MDInit MD4Init<BR>#define MDUpdate
MD4Update<BR>#define MDFinal MD4Final<BR>#endif<BR>#if MD == 5<BR>#define MD_CTX
MD5_CTX<BR>#define MDInit MD5Init<BR>#define MDUpdate MD5Update<BR>#define
MDFinal MD5Final<BR>#endif</P>
<P>/* 主程序.<BR>变量:<BR> -sstring – 摘要字符串<BR>
-t - 运行时间测试<BR>
-x - 运行测试脚本<BR> filename –
摘要文件<BR> (none) - 摘要标准输入<BR> */<BR>int main (argc,
argv)<BR>int argc;</P>
<P>char *argv[];<BR>{<BR> int i;</P>
<P> if (argc > 1)<BR> for (i = 1; i < argc;
i++)<BR> if (argv[i][0] == '-' && argv[i][1] ==
's')<BR> MDString (argv[i] + 2);<BR> else if
(strcmp (argv[i], "-t") == 0)<BR> MDTimeTrial
();<BR> else if (strcmp (argv[i], "-x") ==
0)<BR> MDTestSuite ();<BR>
else<BR> MDFile (argv[i]);<BR>
else<BR> MDFilter ();</P>
<P> return (0);<BR>}</P>
<P>/* 计算字符串的摘要并打印其值 */<BR>static void MDString (string)<BR>char
*string;<BR>{<BR> MD_CTX context;<BR> unsigned char
digest[16];<BR> unsigned int len = strlen (string);</P>
<P> MDInit (&context);<BR> MDUpdate (&context, string,
len);<BR> MDFinal (digest, &context);</P>
<P> printf ("MD%d (\"%s\") = ", MD, string);<BR> MDPrint
(digest);<BR> printf ("\n");<BR>}</P>
<P>/* 测试计算 TEST_BLOCK_COUNT TEST_BLOCK_LEN-byte<BR> 分组摘要的时间
*/<BR>static void MDTimeTrial ()<BR>{<BR> MD_CTX context;<BR> time_t
endTime, startTime;<BR> unsigned char block[TEST_BLOCK_LEN],
digest[16];<BR> unsigned int i;</P>
<P> printf<BR> ("MD%d time trial. Digesting %d %d-byte blocks ...",
MD,<BR> TEST_BLOCK_LEN, TEST_BLOCK_COUNT);</P>
<P> /* 初始化分组*/<BR> for (i = 0; i < TEST_BLOCK_LEN;
i++)<BR> block[i] = (unsigned char)(i & 0xff);</P>
<P> /* 开始时钟 */<BR> time (&startTime);</P>
<P> /* 摘要分组 */<BR> MDInit (&context);<BR> for
(i = 0; i < TEST_BLOCK_COUNT; i++)<BR> MDUpdate (&context, block,
TEST_BLOCK_LEN);<BR> MDFinal (digest, &context);</P>
<P> /* 停止时钟 */<BR> time (&endTime);</P>
<P> printf (" done\n");<BR> printf ("Digest = ");<BR> MDPrint
(digest);<BR> printf ("\nTime = %ld seconds\n",
(long)(endTime-startTime));<BR> printf<BR> ("Speed = %ld
bytes/second\n",<BR> (long)TEST_BLOCK_LEN *
(long)TEST_BLOCK_COUNT/(endTime-startTime));<BR>}</P>
<P>/* 计算一个参考组件串的摘要并打印结果*/<BR>static void MDTestSuite ()<BR>{<BR> printf
("MD%d test suite:\n", MD);</P>
<P> MDString ("");<BR> MDString ("a");<BR> MDString
("abc");<BR> MDString ("message digest");<BR> MDString
("abcdefghijklmnopqrstuvwxyz");<BR>
MDString<BR> ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");<BR>
MDString<BR> ("1234567890123456789012345678901234567890\<BR>1234567890123456789012345678901234567890");<BR>}</P>
<P>/*计算一个文件的摘要并打印结果 */<BR>static void MDFile (filename)<BR>char
*filename;<BR>{<BR> FILE *file;<BR> MD_CTX context;<BR> int
len;<BR> unsigned char buffer[1024], digest[16];</P>
<P> if ((file = fopen (filename, "rb")) == NULL)<BR> printf ("%s
can't be opened\n", filename);</P>
<P> else {<BR> MDInit (&context);<BR> while (len = fread
(buffer, 1, 1024, file))<BR> MDUpdate (&context, buffer,
len);<BR> MDFinal (digest, &context);</P>
<P> fclose (file);</P>
<P> printf ("MD%d (%s) = ", MD, filename);<BR> MDPrint
(digest);<BR> printf ("\n");<BR> }<BR>}</P>
<P>/* 计算标准输入的摘要并打印结果*/<BR>static void MDFilter ()<BR>{<BR> MD_CTX
context;<BR> int len;<BR> unsigned char buffer[16], digest[16];</P>
<P> MDInit (&context);<BR> while (len = fread (buffer, 1, 16,
stdin))<BR> MDUpdate (&context, buffer, len);<BR> MDFinal
(digest, &context);</P>
<P> MDPrint (digest);<BR> printf ("\n");<BR>}</P>
<P>/* 打印一个16进制的摘要*/<BR>static void MDPrint (digest)<BR>unsigned char
digest[16];<BR>{</P>
<P> unsigned int i;</P>
<P> for (i = 0; i < 16; i++)<BR> printf ("%02x",
digest[i]);<BR>}</P>
<P>A.5 测试组件</P>
<P> MD5 测试组件(驱动程序选项"-x")应打印以下值:</P>
<P>MD5 test suite:<BR>MD5 ("") = d41d8cd98f00b204e9800998ecf8427e<BR>MD5 ("a") =
0cc175b9c0f1b6a831c399e269772661<BR>MD5 ("abc") =
900150983cd24fb0d6963f7d28e17f72<BR>MD5 ("message digest") =
f96b697d7cb7938d525a2f31aaf161d0<BR>MD5 ("abcdefghijklmnopqrstuvwxyz") =
c3fcd3d76192e4007dfb496cca67e13b<BR>MD5
("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789")
=<BR>d174ab98d277d9f5a5611c2c9f419d9f<BR>MD5
("123456789012345678901234567890123456789012345678901234567890123456<BR>78901234567890")
= 57edf4a22be3c955ac49da2e2107b67a</P>
<P>8 安全事项<BR>本文中讨论的安全标准被认为已足够实现很高要求的基于公用密钥系统和MD5算法的数字签名<BR>系统中。
<BR>9 作者地址</P>
<P> Ronald L. Rivest<BR> Massachusetts Institute of
Technology<BR> Laboratory for Computer Science<BR>
NE43-324<BR> 545 Technology Square<BR> Cambridge,
MA 02139-1986</P>
<P> Phone: (617) 253-5880<BR> EMail: <A
href="mailto:rivest@theory.lcs.mit.edu">rivest@theory.lcs.mit.edu</A></P>
<P><BR>RFC1321——The MD5 Message-Digest
Algorithm
MD5 报文摘要算法<BR><A></A></P>
<P></P>
<P class=diaryFoot>- 作者: <A
onclick="window.open('http://publishblog.blogchina.com/blog/postMessage.b?receiver=318470','发送短消息','width=520, height=455')"
href="javascript:void(0);">shiyiwan</A> 访问统计:
<SCRIPT language=JavaScript
src="RFC1321---MD5报文摘要算法--追风小屋.files/PageServlet"></SCRIPT>
2005年09月29日, 星期四 10:20 <A
href="javascript:void(keyit=window.open('http://blogmark.blogchina.com/jsp/key/quickaddkey.jsp?k='+encodeURI('RFC1321---MD5报文摘要算法')+'&u='+encodeURI('http://shiyiwan.blogchina.com/shiyiwan/3071370.html')+'&c='+encodeURI(''),'keyit','scrollbars=no,width=500,height=430,status=no,resizable=yes'));keyit.focus();">加入博采</A>
</P></DIV>
<DIV class=operation><A name=trackback>
<H3>Trackback</H3></A>
<P class=trackback>你可以使用这个链接引用该篇文章
http://publishblog.blogchina.com/blog/tb.b?diaryID=3071370 </P></DIV>
<DIV class=operation><A name=relatedDiary>
<H3>博客手拉手</H3></A>
<P class=comment>[2005-08-13 00:00:00.0] <A
title=基本算法(pascal版) href="http://zouyu9631.blogchina.com/2579728.html"
target=_blank>基本算法(pascal版)</A></P>
<P class=comment>[2005-08-22 00:00:00.0] <A
title=换个摘要吧,来点新意思 href="http://juliewitch.blogchina.com/2662080.html"
target=_blank>换个摘要吧,来点新意思</A></P>
<P class=comment>[2005-09-23 11:48:46.0] <A
title="Dijkstra 最短路径算法的一种高效率实现" href="http://wolfhai.blogchina.com/3010469.html"
target=_blank>Dijkstra 最短路径算法的一种高效率实现</A></P>
<P class=comment>[2005-08-12 00:00:00.0] <A title=如何写好摘要
href="http://yjsnudt.blogchina.com/2563716.html" target=_blank>如何写好摘要</A></P>
<P class=comment>[2005-08-13 00:00:00.0] <A
title=各种排序算法的比较 href="http://zouyu9631.blogchina.com/2575487.html"
target=_blank>各种排序算法的比较</A></P></DIV>
<DIV class=operation><A name=comment>
<H3>回复</H3></A>
<TABLE cellSpacing=0 cellPadding=0 width=700 border=0>
<TBODY></TBODY></TABLE></DIV>
<DIV class=operation>
<TABLE class=comment cellSpacing=0 cellPadding=0 width=700 border=0>
<FORM id=replyForm method=post><INPUT type=hidden value=318835 name=blogID>
<INPUT type=hidden value=3071370 name=diaryID> <INPUT type=hidden
value=shiyiwan name=blogDomino>
<SCRIPT>
if(getCookie('userID') == null){
document.write('<tr><td width="70">发布人:</td>');
document.write('<td width="150"> <input name="remark.authorNameFUI" type="text" size="20" class="inputStyle" maxlength="20"></td>');
document.write('<td width="70">邮箱:</td>');
document.write('<td width="435"> <input name="remark.authorEmail" type="text" size="20" class="inputStyle" maxlength="40"></td>');
document.write('</tr><tr><td>主 页:</td>');
document.write('<td colspan="3"> <input name="remark.authorURL" type="text" class="inputStyle" value="HTTP://" size="63" maxlength="100"></td></tr>');
}else{
document.write('<input type="hidden" name="remark.authorNameFUI" value="Blogchina网友">');
}
</SCRIPT>
<TBODY>
<TR align=left>
<TD colSpan=4>评论内容:<BR><TEXTAREA class=textStyle id=remark name=remark.remarkFUI rows=8 cols=60> </TEXTAREA>
</TD></TR>
<TR align=left>
<TD colSpan=4> <INPUT onclick=reply() type=button value=提交>
<INPUT type=reset value=重置> </TD></TR></FORM></TBODY></TABLE></DIV></DIV>
<SCRIPT src="RFC1321---MD5报文摘要算法--追风小屋.files/extend3.js"
type=text/javascript></SCRIPT>
<DIV id=footer><A href="http://blog.blogchina.com/">2003-2004 BlogChina.COM All
rights reserved</A><BR><A href="http://www.blogdriver.com/">Powered by
BlogDriver 2.1</A> </DIV></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -