MD5加密

Posted on 2008-10-21 23:36 viita 阅读(1030) 评论(0)  编辑  收藏 所属分类: struts
 MD5的全称是Message-digest Algorithm 5(信息-摘要算法),在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc,的Ronald L. Rivest开发出来,经MD2、MD3和MD4发展而来。

        不管是MD2、MD4还是MD5,它们都需要获得一个随机长度的信息并产生一个128位的信息摘要。

        在MD5算法中,首先需要对信息进行填充,使其字节长度对512求余的结果等于448。因此,信息的字节长度(Bits Length)将被扩展至N*512+448,即N*64+56个字节(Bytes),N为一个正整数。填充的方法如下,在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充。然后,在在这个结果后面附加一个以64位二进制表示的填充前信息长度。经过这两步的处理,现在的信息字节长度=N*512+448+64=(N+1)*512,即长度恰好是512的整数倍。这样做的原因是为满足后面处理中对信息长度的要求。

        具体的一个MD5实现:

 1package com.meng;
 2
 3
 4import java.security.MessageDigest;
 5
 6/**
 7* <p>
 8* Title:
 9* </p>
10* <p>
11* Description:
12* </p>
13* <p>
14* Copyright: Copyright (c) 2003
15* </p>
16* <p>
17* Company:
18* </p>
19
20@author unascribed
21@version 1.0
22*/

23
24public class MD5 {
25
26    private final static String[] hexDigits = "0""1""2""3""4""5",
27            "6""7""8""9""a""b""c""d""e""f" }
;
28
29    /**
30     * 转换字节数组为16进制字串
31     * 
32     * @param b
33     *            字节数组
34     * @return 16进制字串
35     */

36
37    public static String byteArrayToHexString(byte[] b) {
38        StringBuffer resultSb = new StringBuffer();
39        for (int i = 0; i < b.length; i++{
40            resultSb.append(byteToHexString(b[i]));
41        }

42        return resultSb.toString();
43    }

44
45    private static String byteToHexString(byte b) {
46        int n = b;
47        if (n < 0)
48            n = 256 + n;
49        int d1 = n / 16;
50        int d2 = n % 16;
51        return hexDigits[d1] + hexDigits[d2];
52    }

53
54    public static String MD5Encode(String origin) {
55        String resultString = null;
56
57        try {
58            resultString = new String(origin);
59            MessageDigest md = MessageDigest.getInstance("MD5");
60            resultString = byteArrayToHexString(md.digest(resultString
61                    .getBytes()));
62        }
 catch (Exception ex) {
63
64        }

65        return resultString;
66    }

67
68    public static void main(String[] args) {
69        System.err.println(MD5Encode("哈哈"));
70
71
72        
73    }

74}

75
76

只有注册用户登录后才能发表评论。


网站导航:
 

posts - 11, comments - 18, trackbacks - 0, articles - 4

Copyright © viita