java.security包中的MessageDigest类提供了计算消息摘要(即生成散列码)的方法,首先生成对象,执行其update( )方法可
以将原始数据传递给该对象,然后执行其digest( )方法即可得到消息摘要。具体步骤如下:
(1)生成MessageDigest对象
MessageDigest m=MessageDigest.getInstance("MD5");
MessageDigest类也是一个工厂类,其构造器是受保护的,不允许
直接使用new MessageDigist( )来创建对象,而必须通过其静态方法getInstance( )生成MessageDigest对象。
其中传入的参数指定计算消息摘要所使用的算法,常用的有"MD5","SHA"等。
(2)传入需要计算的字符串
m.update(x.getBytes("UTF8" ));
分析:x为需要计算的字符串,update传入的参数是字节类型或字节类型数组,对于字符串,需要先使用getBytes( )方法生成字符串数组。
(3)计算消息摘要
byte s[ ]=m.digest( );
分析:执行MessageDigest对象的digest( )方法完成计算,计算的结果通过字节类型的数组返回。
(4)处理计算结果
必要的话可以使用如下代码将计算结果(byte数组)转换为字符串。
static String convertToHexString(byte data[]) {
StringBuffer strBuffer = new StringBuffer();
for (int i = 0; i < data.length; i++) {
strBuffer.append(Integer.toHexString(0xff & data[i]));
}
return strBuffer.toString();
}
1 package com.tem1.util;
2
3 import java.security.MessageDigest;
4
5 public class MD5 {
6 public static void main(String[] args) {
7
8 try {
9 String s1 =convertToHexString(MD5.getMD5("abc"));
10 String s2 =convertToHexString(MD5.getMD5("abc"));
11
12 System.out.println(s1);
13 System.out.println(s2);
14
15 } catch (Exception e) {
16
17 e.printStackTrace();
18 }
19
20 }
21
22 /**
23 * 得到消息摘要
24 *
25 * */
26 public static byte[] getMD5(String plainText) {
27 MessageDigest m;
28 byte[] ciphertext = null;
29 try {
30 m = MessageDigest.getInstance("MD5");
31 m.update(plainText.getBytes("UTF8"));
32 ciphertext = m.digest();
33
34 } catch (Exception e) {
35
36 e.printStackTrace();
37 }
38
39 return ciphertext; // 密文
40
41 }
42
43 /**
44 * 计算摘要
45 *
46 */
47 public static String convertToHexString(byte data[]) {
48 StringBuffer strBuffer = new StringBuffer();
49 for (int i = 0; i < data.length; i++) {
50 strBuffer.append(Integer.toHexString(0xff & data[i]));
51 }
52 return strBuffer.toString();
53 }
54 }
MD5.getMD5("abc").toString();
MD5.getMD5("abc").toString();
![]()
String s1 =convertToHexString(MD5.getMD5("abc"));
String s2 =convertToHexString(MD5.getMD5("abc"));
![]()