| 站点地图 | 联系我
| www.asm32.net | 2006版 | 资料中心 | linux | asm/asm32 | C/C++ | VC++ | java | 书签 | ASP.Net书签 | 上善若水 厚德载物
 现在位置 :: 主页 >> 资料中心 >> ROOT / CODE / ARITHMETIC /
 

JAVA 的MD5加密算法源代码

来源(计算机科学论坛)

From: http://www.ieee.org.cn/dispbbs.asp?boardID=41&ID=13873

JAVA 的MD5加密算法源代码

import java.security.*; 
import java.security.spec.*; 

class MD5_Test{ 

    public final static String MD5(String s){ 
        char hexDigits[] = { 
        '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 
        'e', 'f'}; 
        try { 
            byte[] strTemp = s.getBytes(); 
            MessageDigest mdTemp = MessageDigest.getInstance("MD5"); 
            mdTemp.update(strTemp); 
            byte[] md = mdTemp.digest(); 
            int j = md.length; 
            char str[] = new char[j * 2]; 
            int k = 0; 
            for (int i = 0; i < j; i++) { 
                byte byte0 = md[i]; 
                str[k++] = hexDigits[byte0 >>> 4 & 0xf]; 
                str[k++] = hexDigits[byte0 & 0xf]; 
            } 
            return new String(str); 
        } catch (Exception e){ 
            return null; 
        } 
    } 

    public static void main(String[] args){ 
        //MD5_Test aa = new MD5_Test(); 

        System.out.print(MD5_Test.MD5("XX")); 
    }
}





用java就是方便,不出30行就搞定了。




MD5输入可以是任何长度的消息,输出是固定的128位的一个字符串(摘要)。(详细的请参看RFC1321)
处理步骤:
步骤1:增加填充位。填充消息使得其长度与448模512同余。也就是说填充后的消息长度比512的某个整数倍少64位。
步骤2:填充长度。用64位表示填充前消息的长度,并将其附在步骤1所得结果之后。填充前消息长度如果大于2的64次方,则只使用其低64位,即它所包含的是填充前消息的长度对2的64次方取模的结果。
步骤3:初始化MD缓冲区。hash函数的中间结果和最终结果保存于128位的缓冲区中,缓冲区用4个32位寄存器(A,B,C,D)表示,并将这些寄存器初始化为下列32位的整数(16进制):
A=67452301
B=EFCDAB89
C=98BADCFE
D=10325476
以上初始化值以低端格式存储,也就是说,字的最低有效位存储在低地址字节位置。
步骤4:以 512 位的分组(16个字)位单位处理消息。具体是4轮运算结构相同,但各轮使用不同的基本逻辑函数。
(具体步骤略)
步骤5:输出。所有的 L 个 512 位的分组处理完后,第 L 个分组的输出即是128位的消息摘要。

Link: http://www.asm32.net/article_details.aspx?id=984


浏览次数 726 发布时间 2006/5/15 10:17:29 从属分类 ARITHMETIC 【评论】【 】【打印】【关闭
 
| www.asm32.net | 2006版 | 资料中心 | linux | asm/asm32 | C/C++ | VC++ | java | 书签 | ASP.Net书签 | 京ICP备09029108号-1