﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-◎ヤ撧吥菔瀭o┊。&#x7;``。-随笔分类-JAVA</title><link>http://www.blogjava.net/hllwuxin/category/26004.html</link><description>刪除昨天啲煩惱.﹖選擇今天啲快樂.﹖設置明天啲幸福.﹖ </description><language>zh-cn</language><lastBuildDate>Fri, 25 Sep 2009 03:38:31 GMT</lastBuildDate><pubDate>Fri, 25 Sep 2009 03:38:31 GMT</pubDate><ttl>60</ttl><item><title>[转]MyEclipse7.1插件安装 </title><link>http://www.blogjava.net/hllwuxin/archive/2009/09/08/294335.html</link><dc:creator>優雅Ｄě頽廢</dc:creator><author>優雅Ｄě頽廢</author><pubDate>Tue, 08 Sep 2009 09:23:00 GMT</pubDate><guid>http://www.blogjava.net/hllwuxin/archive/2009/09/08/294335.html</guid><wfw:comment>http://www.blogjava.net/hllwuxin/comments/294335.html</wfw:comment><comments>http://www.blogjava.net/hllwuxin/archive/2009/09/08/294335.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hllwuxin/comments/commentRss/294335.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hllwuxin/services/trackbacks/294335.html</trackback:ping><description><![CDATA[<p>最近刚使用MyEclise 7.1 ，发现期插件安装与以前有所不同。 </p>
<p>MyEclipse 7.1 的安装目录结构如下： </p>
<p>view plaincopy to clipboardprint?<br />
1. Genuitec&nbsp;&nbsp;&nbsp;&nbsp; <br />
2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ├─Common&nbsp;&nbsp;&nbsp;&nbsp; <br />
3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp; ├─configuration&nbsp;&nbsp;&nbsp;&nbsp; <br />
4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp; ├─features&nbsp;&nbsp;&nbsp;&nbsp; <br />
5.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp; └─plugins&nbsp;&nbsp;&nbsp;&nbsp; <br />
6.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; └─MyEclipse 7.1&nbsp;&nbsp;&nbsp;&nbsp; <br />
7.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ├─configuration&nbsp;&nbsp;&nbsp;&nbsp; <br />
8.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; └─dropins&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; 1. Genuitec&nbsp; <br />
&nbsp;&nbsp; 2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ├─Common&nbsp; <br />
&nbsp;&nbsp; 3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp; ├─configuration&nbsp; <br />
&nbsp;&nbsp; 4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp; ├─features&nbsp; <br />
&nbsp;&nbsp; 5.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp; └─plugins&nbsp; <br />
&nbsp;&nbsp; 6.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; └─MyEclipse 7.1&nbsp; <br />
&nbsp;&nbsp; 7.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ├─configuration&nbsp; <br />
&nbsp;&nbsp; 8.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; └─dropins&nbsp;&nbsp; 最新的插件安装方式，要求将插件安装在上图中的dropins节点。并且要求以如下结构安装 </p>
<p>dropins--&gt;插件文件夹(可由安装者定制)--&gt;eclipse--&gt;plugins+features </p>
<p>例如，我以fat插件作为安装示例，目录结构图如下： </p>
<p>view plaincopy to clipboardprint?<br />
&nbsp;1. Genuitec&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;2.&nbsp;&nbsp;&nbsp;&nbsp; ├─Common&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;3.&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp; ├─configuration&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;4.&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp; ├─features&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;5.&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp; └─plugins&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;6.&nbsp;&nbsp;&nbsp;&nbsp; └─MyEclipse 7.1&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;7.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ├─configuration&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;8.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; └─dropins&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;9.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; └─fat&nbsp;&nbsp;&nbsp;&nbsp; <br />
10.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; └─eclipse&nbsp;&nbsp;&nbsp;&nbsp; <br />
11.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ├─features&nbsp;&nbsp;&nbsp;&nbsp; <br />
12.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; └─plugins&nbsp;&nbsp;&nbsp;&nbsp; <br />
13.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; └─net.sf.fjep.fatjar_0.0.31(插件)&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; 1. Genuitec&nbsp; <br />
&nbsp;&nbsp; 2.&nbsp;&nbsp;&nbsp;&nbsp; ├─Common&nbsp; <br />
&nbsp;&nbsp; 3.&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp; ├─configuration&nbsp; <br />
&nbsp;&nbsp; 4.&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp; ├─features&nbsp; <br />
&nbsp;&nbsp; 5.&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp; └─plugins&nbsp; <br />
&nbsp;&nbsp; 6.&nbsp;&nbsp;&nbsp;&nbsp; └─MyEclipse 7.1&nbsp; <br />
&nbsp;&nbsp; 7.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ├─configuration&nbsp; <br />
&nbsp;&nbsp; 8.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; └─dropins&nbsp; <br />
&nbsp;&nbsp; 9.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; └─fat&nbsp; <br />
&nbsp; 10.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; └─eclipse&nbsp; <br />
&nbsp; 11.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ├─features&nbsp; <br />
&nbsp; 12.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; └─plugins&nbsp; <br />
&nbsp; 13.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; └─net.sf.fjep.fatjar_0.0.31(插件)&nbsp;&nbsp; 安装好后重新启动MyEclipse7 .1 ,插件的效果就出来了--当然前提是你的插件支持当前eclipse版本。 </p>
<p>&nbsp;</p>
<p>本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/guo_rui22/archive/2009/07/07/4327539.aspx</p>
<img src ="http://www.blogjava.net/hllwuxin/aggbug/294335.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hllwuxin/" target="_blank">優雅Ｄě頽廢</a> 2009-09-08 17:23 <a href="http://www.blogjava.net/hllwuxin/archive/2009/09/08/294335.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse插件管理</title><link>http://www.blogjava.net/hllwuxin/archive/2008/07/13/214610.html</link><dc:creator>優雅Ｄě頽廢</dc:creator><author>優雅Ｄě頽廢</author><pubDate>Sun, 13 Jul 2008 11:31:00 GMT</pubDate><guid>http://www.blogjava.net/hllwuxin/archive/2008/07/13/214610.html</guid><wfw:comment>http://www.blogjava.net/hllwuxin/comments/214610.html</wfw:comment><comments>http://www.blogjava.net/hllwuxin/archive/2008/07/13/214610.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hllwuxin/comments/commentRss/214610.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hllwuxin/services/trackbacks/214610.html</trackback:ping><description><![CDATA[<h3 class="" title=""><a href="http://harrison2010.javaeye.com/blog/161802">Eclipse插件管理</a></h3>
<div class="blog_content">
<p><span style="font-size: small">&nbsp;&nbsp;&nbsp;<strong> 提示：新下载的插件PlugIn一定不要都放在原始的Eclipse目录下去，一大堆，累死你：（</strong></span></p>
<ol>
    <li>前提是你已经下载解压并设置好Eclipse工具，比如解压在E:\OpenSource\Eclipse\目录下，以下这个目录以%ECLIPSE_HOME%来进行表示；
    <li>此时默认的插件是在%ECLIPSE_HOME%\plugins目录中的；
    <li>在%ECLIPSE_HOME%下建立一个PlugInsNew的目录；
    <p>　　比如：E:\OpenSource\Eclipse\PlugInsNew</p>
    <li>如果你下载了一个新的插件，比如叫做：XYZ
    <p>　　那么就在%ECLIPSE_HOME%\PlugInsNew\目录下建立XYZ目录，目录里面是eclipse目录，eclipse目录包含有features与plugins两个子目录；结构如下图所示：</p>
    <p align="center"><img height="410" alt="图1" src="http://dev2dev.bea.com.cn/images/image060810001.jpg" width="220" border="0" _counted="undefined" /></p>
    <li>把下载的新插件的文件放在以下相应目录中；
    <p>　　%ECLIPSE_HOME%\PlugInsNew\XYZ\eclipse\features</p>
    <p>　　%ECLIPSE_HOME%\PlugInsNew\ XYZ\eclipse\plugins</p>
    <li>建立相关的.link的文件；
    <p>　　然后在%ECLIPSE_HOME%\links目录里建立一个XYZ.link的文件</p>
    <p>　　内容如是：</p>
    <p>　　path=E:/OpenSource/Eclipse/PlugInsNew/XYZ</p>
    <p>　　就一行这样的路径指示而已。</p>
    <p>　　这样，如果你下载了多个插件就可以如法炮制建立多个Link文件，想加载哪个插件就把哪个插件的Link文件放到%ECLIPSE_HOME%\links的目录中即可，使用与管理都很方便，建议千万不要放在默认的安装目录中，这样对于升级Eclipse主程序也方便一些；当然如果你喜欢用Find and Install&#8230;进行安装的话也可以的；</p>
    <p>　　如果上面你的%ECLIPSE_HOME%与此不同，请修改XYZ.link文件里的路径。</p>
    <li>删除插件，先关闭Eclipse；
    <p>　　删除%ECLIPSE_HOME%\links\XYZ.link文件即可</p>
    <p>　　删除%ECLIPSE_HOME%\PlugInsNew\XYZ整个目录及文件</p>
    <li>重新启动Eclipse，这样就可以了。如果插件没有生效或者没有删除，请加上-clean进行启动Eclipse，即Eclipse.exe &#8211;clean
    <li>插件安装验证及记录详见：Eclipse的workspace下面的.metadata\.log文件，比如：%ECLIPSE_HOME%\workspace\.metadata\.log文件，有问题的话，打开这个文件看看并进行解决。
    <li>转载别人的，希望大家都能学习！！！</li>
</ol>
</div>
<img src ="http://www.blogjava.net/hllwuxin/aggbug/214610.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hllwuxin/" target="_blank">優雅Ｄě頽廢</a> 2008-07-13 19:31 <a href="http://www.blogjava.net/hllwuxin/archive/2008/07/13/214610.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> MD5算法的java版本（转）</title><link>http://www.blogjava.net/hllwuxin/archive/2007/09/19/146571.html</link><dc:creator>優雅Ｄě頽廢</dc:creator><author>優雅Ｄě頽廢</author><pubDate>Wed, 19 Sep 2007 10:56:00 GMT</pubDate><guid>http://www.blogjava.net/hllwuxin/archive/2007/09/19/146571.html</guid><wfw:comment>http://www.blogjava.net/hllwuxin/comments/146571.html</wfw:comment><comments>http://www.blogjava.net/hllwuxin/archive/2007/09/19/146571.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hllwuxin/comments/commentRss/146571.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hllwuxin/services/trackbacks/146571.html</trackback:ping><description><![CDATA[<div>
<div>package DPS.AuthCom.Radius;</div>
<div><br />
/*************************************************<br />
md5 类实现了RSA Data Security, Inc.在提交给IETF<br />
的RFC1321中的MD5 message-digest 算法。<br />
*************************************************/</div>
<div>public class MD55<br />
{<br />
&nbsp; /* 下面这些S11-S44实际上是一个4*4的矩阵，在原始的C实现中是用#define 实现的，<br />
&nbsp;&nbsp;&nbsp; 这里把它们实现成为static final是表示了只读，切能在同一个进程空间内的多个<br />
&nbsp;&nbsp;&nbsp; Instance间共享*/<br />
&nbsp; static final int S11 = 7;<br />
&nbsp; static final int S12 = 12;<br />
&nbsp; static final int S13 = 17;<br />
&nbsp; static final int S14 = 22;</div>
<div>&nbsp; static final int S21 = 5;<br />
&nbsp; static final int S22 = 9;<br />
&nbsp; static final int S23 = 14;<br />
&nbsp; static final int S24 = 20;</div>
<div>&nbsp; static final int S31 = 4;<br />
&nbsp; static final int S32 = 11;<br />
&nbsp; static final int S33 = 16;<br />
&nbsp; static final int S34 = 23;</div>
<div>&nbsp; static final int S41 = 6;<br />
&nbsp; static final int S42 = 10;<br />
&nbsp; static final int S43 = 15;<br />
&nbsp; static final int S44 = 21;</div>
<div>&nbsp; static final byte[] PADDING =<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -128, 0, 0, 0, 0, 0, 0, 0, 0,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};<br />
&nbsp; /* 下面的三个成员是MD5计算过程中用到的3个核心数据，在原始的C实现中<br />
&nbsp;&nbsp;&nbsp;&nbsp; 被定义到MD5_CTX结构中</div>
<div>&nbsp;&nbsp; */<br />
&nbsp; private long[] state = new long[4]; // state (ABCD)<br />
&nbsp; private long[] count = new long[2]; // number of bits, modulo 2^64 (lsb first)<br />
&nbsp; private byte[] buffer = new byte[64]; // input buffer</div>
<div>&nbsp; /* digestHexStr是MD5的唯一一个公共成员，是最新一次计算结果的<br />
&nbsp;&nbsp;&nbsp; 　 16进制ASCII表示.<br />
&nbsp;&nbsp; */<br />
&nbsp; public String digestHexStr;</div>
<div>&nbsp; /* digest,是最新一次计算结果的2进制内部表示，表示128bit的MD5值.<br />
&nbsp;&nbsp; */<br />
&nbsp; private byte[] digest = new byte[16];</div>
<div>&nbsp; /*<br />
&nbsp;&nbsp;&nbsp; getMD5ofStr是类MD5最主要的公共方法，入口参数是你想要进行MD5变换的字符串<br />
&nbsp;&nbsp;&nbsp; 返回的是变换完的结果，这个结果是从公共成员digestHexStr取得的．<br />
&nbsp;&nbsp; */<br />
&nbsp; public String getMD5ofStr(String inbuf)<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; md5Init();<br />
&nbsp;&nbsp;&nbsp; md5Update(inbuf.getBytes(), inbuf.length());<br />
&nbsp;&nbsp;&nbsp; md5Final();<br />
&nbsp;&nbsp;&nbsp; digestHexStr = "";<br />
&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; 16; i++)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; digestHexStr += byteHEX(digest[i]);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; return digestHexStr;<br />
&nbsp; }</div>
<div>&nbsp; // 这是MD5这个类的标准构造函数，JavaBean要求有一个public的并且没有参数的构造函数<br />
&nbsp; public MD55()<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; md5Init();</div>
<div>&nbsp;&nbsp;&nbsp; return;<br />
&nbsp; }</div>
<div>&nbsp; /* md5Init是一个初始化函数，初始化核心变量，装入标准的幻数 */<br />
&nbsp; private void md5Init()<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; count[0] = 0L;<br />
&nbsp;&nbsp;&nbsp; count[1] = 0L;<br />
&nbsp;&nbsp;&nbsp; ///* Load magic initialization constants.</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp; state[0] = 0x67452301L;<br />
&nbsp;&nbsp;&nbsp; state[1] = 0xefcdab89L;<br />
&nbsp;&nbsp;&nbsp; state[2] = 0x98badcfeL;<br />
&nbsp;&nbsp;&nbsp; state[3] = 0x10325476L;</div>
<div>&nbsp;&nbsp;&nbsp; return;<br />
&nbsp; }</div>
<div>&nbsp; /* F, G, H ,I 是4个基本的MD5函数，在原始的MD5的C实现中，由于它们是<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 简单的位运算，可能出于效率的考虑把它们实现成了宏，在java中，我们把它们<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　实现成了private方法，名字保持了原来C中的。 */</div>
<div>&nbsp; private long F(long x, long y, long z)<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; return (x &amp; y) | ( (~x) &amp; z);</div>
<div>&nbsp; }</div>
<div>&nbsp; private long G(long x, long y, long z)<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; return (x &amp; z) | (y &amp; (~z));</div>
<div>&nbsp; }</div>
<div>&nbsp; private long H(long x, long y, long z)<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; return x ^ y ^ z;<br />
&nbsp; }</div>
<div>&nbsp; private long I(long x, long y, long z)<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; return y ^ (x | (~z));<br />
&nbsp; }</div>
<div>&nbsp; /*<br />
&nbsp;&nbsp;&nbsp;&nbsp; FF,GG,HH和II将调用F,G,H,I进行近一步变换<br />
&nbsp;&nbsp;&nbsp;&nbsp; FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.<br />
&nbsp;&nbsp;&nbsp;&nbsp; Rotation is separate from addition to prevent recomputation.<br />
&nbsp;&nbsp; */</div>
<div>&nbsp; private long FF(long a, long b, long c, long d, long x, long s,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long ac)<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; a += F(b, c, d) + x + ac;<br />
&nbsp;&nbsp;&nbsp; a = ( (int) a &lt;&lt; s) | ( (int) a &gt;&gt;&gt; (32 - s));<br />
&nbsp;&nbsp;&nbsp; a += b;<br />
&nbsp;&nbsp;&nbsp; return a;<br />
&nbsp; }</div>
<div>&nbsp; private long GG(long a, long b, long c, long d, long x, long s,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long ac)<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; a += G(b, c, d) + x + ac;<br />
&nbsp;&nbsp;&nbsp; a = ( (int) a &lt;&lt; s) | ( (int) a &gt;&gt;&gt; (32 - s));<br />
&nbsp;&nbsp;&nbsp; a += b;<br />
&nbsp;&nbsp;&nbsp; return a;<br />
&nbsp; }</div>
<div>&nbsp; private long HH(long a, long b, long c, long d, long x, long s,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long ac)<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; a += H(b, c, d) + x + ac;<br />
&nbsp;&nbsp;&nbsp; a = ( (int) a &lt;&lt; s) | ( (int) a &gt;&gt;&gt; (32 - s));<br />
&nbsp;&nbsp;&nbsp; a += b;<br />
&nbsp;&nbsp;&nbsp; return a;<br />
&nbsp; }</div>
<div>&nbsp; private long II(long a, long b, long c, long d, long x, long s,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long ac)<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; a += I(b, c, d) + x + ac;<br />
&nbsp;&nbsp;&nbsp; a = ( (int) a &lt;&lt; s) | ( (int) a &gt;&gt;&gt; (32 - s));<br />
&nbsp;&nbsp;&nbsp; a += b;<br />
&nbsp;&nbsp;&nbsp; return a;<br />
&nbsp; }</div>
<div>&nbsp; /*<br />
&nbsp;&nbsp; md5Update是MD5的主计算过程，inbuf是要变换的字节串，inputlen是长度，这个<br />
&nbsp;&nbsp; 函数由getMD5ofStr调用，调用之前需要调用md5init，因此把它设计成private的<br />
&nbsp;&nbsp; */<br />
&nbsp; private void md5Update(byte[] inbuf, int inputLen)<br />
&nbsp; {</div>
<div>&nbsp;&nbsp;&nbsp; int i, index, partLen;<br />
&nbsp;&nbsp;&nbsp; byte[] block = new byte[64];<br />
&nbsp;&nbsp;&nbsp; index = (int) (count[0] &gt;&gt;&gt; 3) &amp; 0x3F;<br />
&nbsp;&nbsp;&nbsp; // /* Update number of bits */<br />
&nbsp;&nbsp;&nbsp; if ( (count[0] += (inputLen &lt;&lt; 3)) &lt; (inputLen &lt;&lt; 3))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count[1]++;<br />
&nbsp;&nbsp;&nbsp; count[1] += (inputLen &gt;&gt;&gt; 29);</div>
<div>&nbsp;&nbsp;&nbsp; partLen = 64 - index;</div>
<div>&nbsp;&nbsp;&nbsp; // Transform as many times as possible.<br />
&nbsp;&nbsp;&nbsp; if (inputLen &gt;= partLen)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; md5Memcpy(buffer, inbuf, index, 0, partLen);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; md5Transform(buffer);</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (i = partLen; i + 63 &lt; inputLen; i += 64)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; md5Memcpy(block, inbuf, 0, i, 64);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; md5Transform(block);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; index = 0;</div>
<div>&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; else</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i = 0;</div>
<div>&nbsp;&nbsp;&nbsp; ///* Buffer remaining input */<br />
&nbsp;&nbsp;&nbsp; md5Memcpy(buffer, inbuf, index, i, inputLen - i);</div>
<div>&nbsp; }</div>
<div>&nbsp; /*<br />
&nbsp;&nbsp;&nbsp; md5Final整理和填写输出结果<br />
&nbsp;&nbsp; */<br />
&nbsp; private void md5Final()<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; byte[] bits = new byte[8];<br />
&nbsp;&nbsp;&nbsp; int index, padLen;</div>
<div>&nbsp;&nbsp;&nbsp; ///* Save number of bits */<br />
&nbsp;&nbsp;&nbsp; Encode(bits, count, 8);</div>
<div>&nbsp;&nbsp;&nbsp; ///* Pad out to 56 mod 64.<br />
&nbsp;&nbsp;&nbsp;&nbsp; index = (int) (count[0] &gt;&gt;&gt; 3) &amp; 0x3f;<br />
&nbsp;&nbsp;&nbsp; padLen = (index &lt;<br />
&nbsp;&nbsp;&nbsp; md5Update(PADDING, padLen);</div>
<div>&nbsp;&nbsp;&nbsp; ///* Append length (before padding) */<br />
&nbsp;&nbsp;&nbsp; md5Update(bits, 8);</div>
<div>&nbsp;&nbsp;&nbsp; ///* Store state in digest */<br />
&nbsp;&nbsp;&nbsp; Encode(digest, state, 16);</div>
<div>&nbsp; }</div>
<div>&nbsp; /* md5Memcpy是一个内部使用的byte数组的块拷贝函数，从input的inpos开始把len长度的<br />
&nbsp;&nbsp; 　　　　　 字节拷贝到output的outpos位置开始<br />
&nbsp;&nbsp; */</div>
<div>&nbsp; private void md5Memcpy(byte[] output, byte[] input,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int outpos, int inpos, int len)<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; int i;</div>
<div>&nbsp;&nbsp;&nbsp; for (i = 0; i &lt; len; i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; output[outpos + i] = input[inpos + i];<br />
&nbsp; }</div>
<div>&nbsp; /*<br />
&nbsp;&nbsp;&nbsp;&nbsp; md5Transform是MD5核心变换程序，有md5Update调用，block是分块的原始字节<br />
&nbsp;&nbsp; */<br />
&nbsp; private void md5Transform(byte block[])<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; long a = state[0], b = state[1], c = state[2], d = state[3];<br />
&nbsp;&nbsp;&nbsp; long[] x = new long[16];</div>
<div>&nbsp;&nbsp;&nbsp; Decode(x, block, 64);</div>
<div>&nbsp;&nbsp;&nbsp; /* Round 1 */<br />
&nbsp;&nbsp;&nbsp; a = FF(a, b, c, d, x[0], S11, 0xd76aa478L); /* 1 */<br />
&nbsp;&nbsp;&nbsp; d = FF(d, a, b, c, x[1], S12, 0xe8c7b756L); /* 2 */<br />
&nbsp;&nbsp;&nbsp; c = FF(c, d, a, b, x[2], S13, 0x242070dbL); /* 3 */<br />
&nbsp;&nbsp;&nbsp; b = FF(b, c, d, a, x[3], S14, 0xc1bdceeeL); /* 4 */<br />
&nbsp;&nbsp;&nbsp; a = FF(a, b, c, d, x[4], S11, 0xf57c0fafL); /* 5 */<br />
&nbsp;&nbsp;&nbsp; d = FF(d, a, b, c, x[5], S12, 0x4787c62aL); /* 6 */<br />
&nbsp;&nbsp;&nbsp; c = FF(c, d, a, b, x[6], S13, 0xa8304613L); /* 7 */<br />
&nbsp;&nbsp;&nbsp; b = FF(b, c, d, a, x[7], S14, 0xfd469501L); /* 8 */<br />
&nbsp;&nbsp;&nbsp; a = FF(a, b, c, d, x[8], S11, 0x698098d8L); /* 9 */<br />
&nbsp;&nbsp;&nbsp; d = FF(d, a, b, c, x[9], S12, 0x8b44f7afL); /* 10 */<br />
&nbsp;&nbsp;&nbsp; c = FF(c, d, a, b, x[10], S13, 0xffff5bb1L); /* 11 */<br />
&nbsp;&nbsp;&nbsp; b = FF(b, c, d, a, x[11], S14, 0x895cd7beL); /* 12 */<br />
&nbsp;&nbsp;&nbsp; a = FF(a, b, c, d, x[12], S11, 0x6b901122L); /* 13 */<br />
&nbsp;&nbsp;&nbsp; d = FF(d, a, b, c, x[13], S12, 0xfd987193L); /* 14 */<br />
&nbsp;&nbsp;&nbsp; c = FF(c, d, a, b, x[14], S13, 0xa679438eL); /* 15 */<br />
&nbsp;&nbsp;&nbsp; b = FF(b, c, d, a, x[15], S14, 0x49b40821L); /* 16 */</div>
<div>&nbsp;&nbsp;&nbsp; /* Round 2 */<br />
&nbsp;&nbsp;&nbsp; a = GG(a, b, c, d, x[1], S21, 0xf61e2562L); /* 17 */<br />
&nbsp;&nbsp;&nbsp; d = GG(d, a, b, c, x[6], S22, 0xc040b340L); /* 18 */<br />
&nbsp;&nbsp;&nbsp; c = GG(c, d, a, b, x[11], S23, 0x265e5a51L); /* 19 */<br />
&nbsp;&nbsp;&nbsp; b = GG(b, c, d, a, x[0], S24, 0xe9b6c7aaL); /* 20 */<br />
&nbsp;&nbsp;&nbsp; a = GG(a, b, c, d, x[5], S21, 0xd62f105dL); /* 21 */<br />
&nbsp;&nbsp;&nbsp; d = GG(d, a, b, c, x[10], S22, 0x2441453L); /* 22 */<br />
&nbsp;&nbsp;&nbsp; c = GG(c, d, a, b, x[15], S23, 0xd8a1e681L); /* 23 */<br />
&nbsp;&nbsp;&nbsp; b = GG(b, c, d, a, x[4], S24, 0xe7d3fbc8L); /* 24 */<br />
&nbsp;&nbsp;&nbsp; a = GG(a, b, c, d, x[9], S21, 0x21e1cde6L); /* 25 */<br />
&nbsp;&nbsp;&nbsp; d = GG(d, a, b, c, x[14], S22, 0xc33707d6L); /* 26 */<br />
&nbsp;&nbsp;&nbsp; c = GG(c, d, a, b, x[3], S23, 0xf4d50d87L); /* 27 */<br />
&nbsp;&nbsp;&nbsp; b = GG(b, c, d, a, x[8], S24, 0x455a14edL); /* 28 */<br />
&nbsp;&nbsp;&nbsp; a = GG(a, b, c, d, x[13], S21, 0xa9e3e905L); /* 29 */<br />
&nbsp;&nbsp;&nbsp; d = GG(d, a, b, c, x[2], S22, 0xfcefa3f8L); /* 30 */<br />
&nbsp;&nbsp;&nbsp; c = GG(c, d, a, b, x[7], S23, 0x676f02d9L); /* 31 */<br />
&nbsp;&nbsp;&nbsp; b = GG(b, c, d, a, x[12], S24, 0x8d2a4c8aL); /* 32 */</div>
<div>&nbsp;&nbsp;&nbsp; /* Round 3 */<br />
&nbsp;&nbsp;&nbsp; a = HH(a, b, c, d, x[5], S31, 0xfffa3942L); /* 33 */<br />
&nbsp;&nbsp;&nbsp; d = HH(d, a, b, c, x[8], S32, 0x8771f681L); /* 34 */<br />
&nbsp;&nbsp;&nbsp; c = HH(c, d, a, b, x[11], S33, 0x6d9d6122L); /* 35 */<br />
&nbsp;&nbsp;&nbsp; b = HH(b, c, d, a, x[14], S34, 0xfde5380cL); /* 36 */<br />
&nbsp;&nbsp;&nbsp; a = HH(a, b, c, d, x[1], S31, 0xa4beea44L); /* 37 */<br />
&nbsp;&nbsp;&nbsp; d = HH(d, a, b, c, x[4], S32, 0x4bdecfa9L); /* 38 */<br />
&nbsp;&nbsp;&nbsp; c = HH(c, d, a, b, x[7], S33, 0xf6bb4b60L); /* 39 */<br />
&nbsp;&nbsp;&nbsp; b = HH(b, c, d, a, x[10], S34, 0xbebfbc70L); /* 40 */<br />
&nbsp;&nbsp;&nbsp; a = HH(a, b, c, d, x[13], S31, 0x289b7ec6L); /* 41 */<br />
&nbsp;&nbsp;&nbsp; d = HH(d, a, b, c, x[0], S32, 0xeaa127faL); /* 42 */<br />
&nbsp;&nbsp;&nbsp; c = HH(c, d, a, b, x[3], S33, 0xd4ef3085L); /* 43 */<br />
&nbsp;&nbsp;&nbsp; b = HH(b, c, d, a, x[6], S34, 0x4881d05L); /* 44 */<br />
&nbsp;&nbsp;&nbsp; a = HH(a, b, c, d, x[9], S31, 0xd9d4d039L); /* 45 */<br />
&nbsp;&nbsp;&nbsp; d = HH(d, a, b, c, x[12], S32, 0xe6db99e5L); /* 46 */<br />
&nbsp;&nbsp;&nbsp; c = HH(c, d, a, b, x[15], S33, 0x1fa27cf8L); /* 47 */<br />
&nbsp;&nbsp;&nbsp; b = HH(b, c, d, a, x[2], S34, 0xc4ac5665L); /* 48 */</div>
<div>&nbsp;&nbsp;&nbsp; /* Round 4 */<br />
&nbsp;&nbsp;&nbsp; a = II(a, b, c, d, x[0], S41, 0xf4292244L); /* 49 */<br />
&nbsp;&nbsp;&nbsp; d = II(d, a, b, c, x[7], S42, 0x432aff97L); /* 50 */<br />
&nbsp;&nbsp;&nbsp; c = II(c, d, a, b, x[14], S43, 0xab9423a7L); /* 51 */<br />
&nbsp;&nbsp;&nbsp; b = II(b, c, d, a, x[5], S44, 0xfc93a039L); /* 52 */<br />
&nbsp;&nbsp;&nbsp; a = II(a, b, c, d, x[12], S41, 0x655b59c3L); /* 53 */<br />
&nbsp;&nbsp;&nbsp; d = II(d, a, b, c, x[3], S42, 0x8f0ccc92L); /* 54 */<br />
&nbsp;&nbsp;&nbsp; c = II(c, d, a, b, x[10], S43, 0xffeff47dL); /* 55 */<br />
&nbsp;&nbsp;&nbsp; b = II(b, c, d, a, x[1], S44, 0x85845dd1L); /* 56 */<br />
&nbsp;&nbsp;&nbsp; a = II(a, b, c, d, x[8], S41, 0x6fa87e4fL); /* 57 */<br />
&nbsp;&nbsp;&nbsp; d = II(d, a, b, c, x[15], S42, 0xfe2ce6e0L); /* 58 */<br />
&nbsp;&nbsp;&nbsp; c = II(c, d, a, b, x[6], S43, 0xa3014314L); /* 59 */<br />
&nbsp;&nbsp;&nbsp; b = II(b, c, d, a, x[13], S44, 0x4e0811a1L); /* 60 */<br />
&nbsp;&nbsp;&nbsp; a = II(a, b, c, d, x[4], S41, 0xf7537e82L); /* 61 */<br />
&nbsp;&nbsp;&nbsp; d = II(d, a, b, c, x[11], S42, 0xbd3af235L); /* 62 */<br />
&nbsp;&nbsp;&nbsp; c = II(c, d, a, b, x[2], S43, 0x2ad7d2bbL); /* 63 */<br />
&nbsp;&nbsp;&nbsp; b = II(b, c, d, a, x[9], S44, 0xeb86d391L); /* 64 */</div>
<div>&nbsp;&nbsp;&nbsp; state[0] += a;<br />
&nbsp;&nbsp;&nbsp; state[1] += b;<br />
&nbsp;&nbsp;&nbsp; state[2] += c;<br />
&nbsp;&nbsp;&nbsp; state[3] += d;</div>
<div>&nbsp; }</div>
<div>&nbsp; /*Encode把long数组按顺序拆成byte数组，因为java的long类型是64bit的，<br />
&nbsp;&nbsp;&nbsp; 只拆低32bit，以适应原始C实现的用途<br />
&nbsp;&nbsp; */<br />
&nbsp; private void Encode(byte[] output, long[] input, int len)<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; int i, j;</div>
<div>&nbsp;&nbsp;&nbsp; for (i = 0, j = 0; j &lt; len; i++, j += 4)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; output[j] = (byte) (input[i] &amp; 0xffL);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; output[j + 1] = (byte) ( (input[i] &gt;&gt;&gt; 8) &amp; 0xffL);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; output[j + 2] = (byte) ( (input[i] &gt;&gt;&gt; 16) &amp; 0xffL);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; output[j + 3] = (byte) ( (input[i] &gt;&gt;&gt; 24) &amp; 0xffL);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp; }</div>
<div>&nbsp; /*Decode把byte数组按顺序合成成long数组，因为java的long类型是64bit的，<br />
&nbsp;&nbsp;&nbsp; 只合成低32bit，高32bit清零，以适应原始C实现的用途<br />
&nbsp;&nbsp; */<br />
&nbsp; private void Decode(long[] output, byte[] input, int len)<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; int i, j;</div>
<div>&nbsp;&nbsp;&nbsp; for (i = 0, j = 0; j &lt; len; i++, j += 4)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; output[i] = b2iu(input[j]) |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (b2iu(input[j + 1]) &lt;&lt; 8) |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (b2iu(input[j + 2]) &lt;&lt; 16) |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (b2iu(input[j + 3]) &lt;&lt; 24);</div>
<div>&nbsp;&nbsp;&nbsp; return;<br />
&nbsp; }</div>
<div>&nbsp; /*<br />
&nbsp;&nbsp;&nbsp; b2iu是我写的一个把byte按照不考虑正负号的原则的＂升位＂程序，因为java没有unsigned运算<br />
&nbsp;&nbsp; */<br />
&nbsp; public static long b2iu(byte b)<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; return b &lt; 0 ? b &amp;<br />
&nbsp; }</div>
<div>&nbsp; /*byteHEX()，用来把一个byte类型的数转换成十六进制的ASCII表示，<br />
&nbsp;&nbsp;&nbsp; 　因为java中的byte的toString无法实现这一点，我们又没有C语言中的<br />
&nbsp;&nbsp;&nbsp; sprintf(outbuf,"%02X",ib)<br />
&nbsp;&nbsp; */<br />
&nbsp; public static String byteHEX(byte ib)<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; char[] Digit =<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'A', 'B', 'C', 'D', 'E', 'F'};<br />
&nbsp;&nbsp;&nbsp; char[] ob = new char[2];<br />
&nbsp;&nbsp;&nbsp; ob[0] = Digit[ (ib &gt;&gt;&gt; 4) &amp; 0X0F];<br />
&nbsp;&nbsp;&nbsp; ob[1] = Digit[ib &amp; 0X0F];<br />
&nbsp;&nbsp;&nbsp; String s = new String(ob);<br />
&nbsp;&nbsp;&nbsp; return s;<br />
&nbsp; }</div>
<div>&nbsp; /**<br />
&nbsp;&nbsp; * getMD5ofBye<br />
&nbsp;&nbsp; *<br />
&nbsp;&nbsp; * @param inbuf byte[]<br />
&nbsp;&nbsp; * @return byte[]<br />
&nbsp;&nbsp; */<br />
&nbsp; public byte[] getMD5ofBye(byte[] inbuf)<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; md5Init();<br />
&nbsp;&nbsp;&nbsp; md5Update(inbuf, inbuf.length);<br />
&nbsp;&nbsp;&nbsp; md5Final();<br />
&nbsp;&nbsp;&nbsp; digestHexStr = "";&nbsp;&nbsp;&nbsp; </div>
<div>&nbsp;&nbsp; for (int i = 0; i &lt; 16; i++)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; digestHexStr += byteHEX(digest[i]);&nbsp;&nbsp;&nbsp; </div>
<div>&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; return digestHexStr.getBytes();</div>
<div>&nbsp; }<br />
}</div>
<div>&nbsp;</div>
<div>注：如果有人使用过这个版本的MD5算法，会发现和c的返回值不一样，是因为c返回的是一个char*的指针，而java并没有指针，和c程序在内存中的值明显对不上，即使把最后一个方法getMD5ofBye的返回值改成char[]还是达不到目的，而且你会看到c内存中返回值的一个字节是java内存中返回值的两个字节合在一起的值，举个例子：比如说c中的返回值是char a[0] ='0x12',而java中返回值则是char b[0] = '0x01',b[1] = '0x02'。要怎么改变这种在内存中返回值不同的情况？你可以把byteHEX方法完全注释掉，换成下面这个方法：</div>
<div>public static byte byteHEX(byte ib)<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ib;<br />
&nbsp; }</div>
<div>并且把getMD5ofBye方法稍作修改，即改成：<br />
public byte[] getMD5ofBye(byte[] inbuf)<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; md5Init();<br />
&nbsp;&nbsp;&nbsp; md5Update(inbuf, inbuf.length);<br />
&nbsp;&nbsp;&nbsp; md5Final();<br />
&nbsp;&nbsp;&nbsp; byte digestHexStr;</div>
<div>&nbsp;&nbsp;&nbsp; byte b[] = new byte[16];//大小根据需要自己定；<br />
&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; 16; i++)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; digestHexStr += byteHEX(digest[i]);</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b[i] = digestHexStr&nbsp;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; return b;</div>
<div>&nbsp; }<br />
</div>
<div>
<div>经过这样的处理后，java版本的MD5算法就和c版本的MD5算法在返回值上完全一致了。</div>
</div>
</div>
 <img src ="http://www.blogjava.net/hllwuxin/aggbug/146571.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hllwuxin/" target="_blank">優雅Ｄě頽廢</a> 2007-09-19 18:56 <a href="http://www.blogjava.net/hllwuxin/archive/2007/09/19/146571.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>