使用MD算法获取消息摘要
使用md2、md4、md5算法封装了一个获取消息摘要的工具类,如下:
package com.cd.springbootdemo.util;
import java.security.MessageDigest;
import java.security.Security;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.util.encoders.Hex;
/**
*
* @desc 使用MD算法获取消息摘要
*/
public class MdCoder {
/**
* MD2消息摘要
* @param data 待做摘要处理的数据
* return byte[] 消息摘要
* @throws Exception
*/
public static byte[] encodeMD2(byte[] data) throws Exception {
MessageDigest md=MessageDigest.getInstance("MD2");
return md.digest(data);
}
/**
* MD2消息摘要
* @param data 待做摘要处理的数据
* return byte[] 消息摘要
* @throws Exception
*/
public static String encodeMD2Hex(byte[] data) throws Exception {
//执行消息摘要
byte[] b=encodeMD2(data);
//做十六进制编码处理
return new String(Hex.encode(b));
}
/**
* MD4消息摘要
* @param data 待做摘要处理的数据
* return byte[] 消息摘要
* @throws Exception
*/
public static byte[] encodeMD4(byte[] data) throws Exception {
//加入BouncyCastleProvider支持
Security.addProvider(new BouncyCastleProvider());
MessageDigest md=MessageDigest.getInstance("MD4");
return md.digest(data);
}
/**
* MD4消息摘要
* @param data 待做摘要处理的数据
* return byte[] 消息摘要
* @throws Exception
*/
public static String encodeMD4Hex(byte[] data) throws Exception {
//执行消息摘要
byte[] b=encodeMD4(data);
//做十六进制编码处理
return new String(Hex.encode(b));
}
/**
* MD5消息摘要
* @param data 待做摘要处理的数据
* return byte[] 消息摘要
* @throws Exception
*/
public static byte[] encodeMD5(byte[] data) throws Exception {
MessageDigest md=MessageDigest.getInstance("MD5");
return md.digest(data);
}
/**
* MD5消息摘要
* @param data 待做摘要处理的数据
* return byte[] 消息摘要
* @throws Exception
*/
public static String encodeMD5Hex(byte[] data) throws Exception {
//执行消息摘要
byte[] b=encodeMD5(data);
//做十六进制编码处理
return new String(Hex.encode(b));
}
public static void main(String[] args) throws Exception {
String str="MDHex消息摘要";
String data1=MdCoder.encodeMD2Hex(str.getBytes());
String data2=MdCoder.encodeMD2Hex(str.getBytes());
System.out.println("原文:\t"+str);
System.out.println("MD2Hex-1:\t"+data1);
System.out.println("MD2Hex-2:\t"+data2);
str="MDHex消息摘要";
data1=MdCoder.encodeMD4Hex(str.getBytes());
data2=MdCoder.encodeMD4Hex(str.getBytes());
System.out.println("\n原文:\t"+str);
System.out.println("MD4Hex-1:\t"+data1);
System.out.println("MD4Hex-2:\t"+data2);
str="MDHex消息摘要";
data1=MdCoder.encodeMD5Hex(str.getBytes());
data2=MdCoder.encodeMD5Hex(str.getBytes());
System.out.println("\n原文:\t"+str);
System.out.println("MD5Hex-1:\t"+data1);
System.out.println("MD5Hex-2:\t"+data2);
}
}
测试效果: