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());// 初始化MessageDigestMessageDigest 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);}
}