MD5即Message-Digest Algorithm 5(信息-摘要
算法 5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译
摘要算法、哈希算法),主流编程语言普遍已有MD5实现。
将数据(如汉字)运算为另一固定长度值是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。
本实例介绍用MD5进行加密和验证,将输入字符串通过MD5加密成另一个字符串,而且根据新的字符串无法获得原字符串,但可以在不知道原始密码的情况下进行密码验证。
关键技术:
*通过java.security.MessageDigest的静态方法getInstance创建具有指定算法名称的信息摘要,参数为算法名,传入“MD5”则表示将使用MD5算法。
*MessageDigest的digest实例方法使用指定的字节数组对摘要进行最后更新,然后完成摘要计算,返回存放哈希值结果的季节数组,这个数组就是MD5加密产品。
*将加密后的字节数组转换成十六进制的字符窜,形成最终的密码。
*当输入字符串经过MD5加密后,得到的字符串与密码一样,则认为密码验证通过。
实例演示:
1
import java.security.MessageDigest;
2
3
4
public 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