MD5即Message-Digest Algorithm 5(信息-摘要
算法 5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译
摘要算法、哈希算法),主流编程语言普遍已有MD5实现。
将数据(如汉字)运算为另一固定长度值是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。
本实例介绍用MD5进行加密和验证,将输入字符串通过MD5加密成另一个字符串,而且根据新的字符串无法获得原字符串,但可以在不知道原始密码的情况下进行密码验证。
关键技术:
*通过java.security.MessageDigest的静态方法getInstance创建具有指定算法名称的信息摘要,参数为算法名,传入“MD5”则表示将使用MD5算法。
*MessageDigest的digest实例方法使用指定的字节数组对摘要进行最后更新,然后完成摘要计算,返回存放哈希值结果的季节数组,这个数组就是MD5加密产品。
*将加密后的字节数组转换成十六进制的字符窜,形成最终的密码。
*当输入字符串经过MD5加密后,得到的字符串与密码一样,则认为密码验证通过。
实例演示:
1import java.security.MessageDigest;
2
3
4public class Password {
5 //16进制下数字到字符的映射数组
6 private static String[] hexDigits = new String[]{"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"};
7
8 //将inputstr加密
9 public static String createPassword(String inputstr)
10 {
11 return encodeByMD5(inputstr);
12 }
13
14 //验证密码是否正确
15 public static boolean authenticatePassword(String pass , String inputstr)
16 {
17 if(pass.equals((encodeByMD5(inputstr))))
18 {
19 return true;
20 }
21 else
22 {
23 return false;
24 }
25 }
26 //对字符串进行MD5编码
27 private static String encodeByMD5(String originstr)
28 {
29 if(originstr !=null)
30 {
31 try{
32 //创建具有指定算法名称的信息摘要
33 MessageDigest md = MessageDigest.getInstance("MD5");
34 //使用指定的字节数组对摘要进行最后的更新,然后完成摘要计算
35 byte[] results = md.digest(originstr.getBytes());
36 //将得到的字节数组编程字符窜返回
37 String resultString = byteArrayToHexString(results);
38 return resultString.toUpperCase();
39 }catch(Exception ex){
40 ex.printStackTrace();
41 }
42 }
43 return null;
44 }
45 //转换字节数组为十六进制字符串
46 private static String byteArrayToHexString(byte[] b)
47 {
48 StringBuffer resultsb = new StringBuffer();
49 int i=0;
50 for(i=0;i<b.length;i++)
51 {
52 resultsb.append(byteToHexString(b[i]));
53 }
54 return resultsb.toString();
55 }
56 //将字节转化成十六进制的字符串
57 private static String byteToHexString(byte b)
58 {
59
60 int n=b;
61 if(n<0)
62 {
63 n = 256 + n;
64 }
65 int d1 = n / 16;
66 int d2 = n /16;
67 return hexDigits[d1]+hexDigits[d2];
68 }
69
70 public static void main(String[] args)
71 {
72 String password = Password.createPassword("123456");
73 System.out.println("对123456用MD5加密后:"+password);
74 String inputstr = "1234";
75 System.out.println("1234与密码相同?"+Password.authenticatePassword(password, inputstr));
76 inputstr = "123456";
77 System.out.println("123456与密码相同?"+Password.authenticatePassword(password, inputstr));
78 }
79}
转自:http://blog.csdn.net/jay314159/article/details/4918358