MD (Message Digest) - 128位摘要信息 Maven 依赖 参考资料 MD (Message Digest) - 128位摘要信息 package com.freud.test.security; import java.io.IOException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.Security; import org.apache.commons.codec.binary.Hex; import org.apache.commons.codec.digest.DigestUtils; import org.bouncycastle.crypto.Digest; import org.bouncycastle.crypto.digests.MD2Digest; import org.bouncycastle.crypto.digests.MD4Digest; import org.bouncycastle.crypto.digests.MD5Digest; import org.bouncycastle.jce.provider.BouncyCastleProvider; /** * * MD-数据摘要算法的实现 * * @author Freud Kang * */ public class MDTest { private static String src = "Never say give up!"; public static void main(String[] args) throws Exception { System.out.println("明文:" + src); System.out.println("---------MD5--JDK------------"); jdkMD5(); System.out.println("---------MD5--Bouncy Castle------------"); bcMD5(); System.out.println("---------MD5--Commons Codec------------"); ccMD5(); System.out.println("---------MD2--JDK------------"); jdkMD2(); System.out.println("---------MD2--Bouncy Castle------------"); bcMD2(); System.out.println("---------MD2--Commons Codec------------"); ccMD2(); System.out.println("---------MD4_1--Bouncy Castle------------"); bcMD4_1(); System.out.println("---------MD4_2--Bouncy Castle------------"); bcMD4_2(); } /** * MD5 的JDK支持 * * @throws NoSuchAlgorithmException */ public static void jdkMD5() throws NoSuchAlgorithmException { MessageDigest md = MessageDigest.getInstance("MD5"); byte[] md5Bytes = md.digest(src.getBytes()); System.out.println("JDK MD5:" + Hex.encodeHexString(md5Bytes)); } /** * MD5 的Bouncy Castle支持 */ public static void bcMD5() { Digest digest = new MD5Digest(); digest.update(src.getBytes(), 0, src.getBytes().length); byte[] md5Bytes = new byte[digest.getDigestSize()]; digest.doFinal(md5Bytes, 0); System.out.println("BC MD5:" + Hex.encodeHexString(md5Bytes)); } /** * MD5 的Commons Codec支持 */ public static void ccMD5() { String md5 = DigestUtils.md5Hex(src.getBytes()); System.out.println("CC MD5:" + md5); } /** * MD2 的JDK支持 * * @throws NoSuchAlgorithmException */ public static void jdkMD2() throws NoSuchAlgorithmException { MessageDigest md = MessageDigest.getInstance("MD2"); byte[] md5Bytes = md.digest(src.getBytes()); System.out.println("JDK MD2:" + Hex.encodeHexString(md5Bytes)); } /** * MD2 的Bouncy Castle支持 */ public static void bcMD2() { Digest digest = new MD2Digest(); digest.update(src.getBytes(), 0, src.getBytes().length); byte[] md2Bytes = new byte[digest.getDigestSize()]; digest.doFinal(md2Bytes, 0); System.out.println("BC MD2:" + Hex.encodeHexString(md2Bytes)); } /** * MD2 的Commons Codec支持 */ public static void ccMD2() { String md2 = DigestUtils.md2Hex(src.getBytes()); System.out.println("CC MD2:" + md2); } /** * MD4 的Bouncy Castle原生支持 * * @throws IOException */ public static void bcMD4_1() throws IOException { Digest digest = new MD4Digest(); digest.update(src.getBytes(), 0, src.getBytes().length); byte[] md4Bytes = new byte[digest.getDigestSize()]; digest.doFinal(md4Bytes, 0); System.out.println("BC MD4_2:" + Hex.encodeHexString(md4Bytes)); } /** * MD4 的Bouncy Castle支持加入Java的Security Provider来通过JDK API支持 * * @throws IOException */ public static void bcMD4_2() throws NoSuchAlgorithmException { Security.addProvider(new BouncyCastleProvider()); MessageDigest md = MessageDigest.getInstance("MD4"); byte[] md4Bytes = md.digest(src.getBytes()); System.out.println("BC MD4_2:" + Hex.encodeHexString(md4Bytes)); } } Maven 依赖 <dependencies> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.10</version> </dependency> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk16</artifactId> <version>1.46</version> </dependency> </dependencies> 参考资料 Java实现消息摘要算法加密