MD系列算法的实现是通过MessageDigest类来完成的,如果需要以流的处理方式完成消息摘要,则需要使用DigestInputStream和DigestOutputStream。
MD4
package org.zlex.chapter06_1_2;
import java.security.MessageDigest;
import java.security.Security;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.util.encoders.Hex;
/**
* MD4加密组件
*
* @author 梁栋
* @version 1.0
* @since 1.0
*/
public abstract class MD4Coder {
/**
* MD4加密
*
* @param data
* 待加密数据
* @return byte[] 消息摘要
*
* @throws Exception
*/
public static byte[] encodeMD4(byte[] data) throws Exception {
// 加入BouncyCastleProvider支持
Security.addProvider(new BouncyCastleProvider());
// 初始化MessageDigest
MessageDigest md = MessageDigest.getInstance("MD4");
// 执行消息摘要
return md.digest(data);
}
/**
* MD4加密
*
* @param data
* 待加密数据
* @return String 消息摘要
*
* @throws Exception
*/
public static String encodeMD4Hex(byte[] data) throws Exception {
// 执行消息摘要
byte[] b = encodeMD4(data);
// 做十六进制编码处理
return new String(Hex.encode(b));
}
}
MD5
/**
* 2009-9-3
*/
package org.zlex.chapter06_1_3;
import org.apache.commons.codec.digest.DigestUtils;
/**
* MD5加密组件
*
* @author 梁栋
* @version 1.0
* @since 1.0
*/
public abstract class MD5Coder {
/**
* MD5加密
*
* @param data
* 待加密数据
* @return byte[] 消息摘要
*
* @throws Exception
*/
public static byte[] encodeMD5(String data) throws Exception {
// 执行消息摘要
return DigestUtils.md5(data);
}
/**
* MD5加密
*
* @param data
* 待加密数据
* @return byte[] 消息摘要
*
* @throws Exception
*/
public static String encodeMD5Hex(String data) throws Exception {
// 执行消息摘要
return DigestUtils.md5Hex(data);
}
}