JDK、第三方库commons-codec和bouncy-castle均对这些有实现。
MD系列算法实现
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;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.Security;
public class MD {
private static String srcMsg = "imooc security md";
public static void main(String[] args) throws NoSuchAlgorithmException {
jdkMD(srcMsg, "MD5");
jdkMD(srcMsg, "MD2");
bcMD(srcMsg, MD5Digest.class);
bcMD(srcMsg, MD4Digest.class);
bcMD(srcMsg, MD2Digest.class);
bcMD4(srcMsg);
ccMD(srcMsg, "MD5");
ccMD(srcMsg, "MD2");
ccMD(srcMsg, "MD4");
}
/**
* JDK MD算法相关实现
*
* @param srcMsg 加密消息
* @param md 支持算法:MD2、MD5
*/
public static void jdkMD(String srcMsg, String md) {
try {
MessageDigest messageDigest = MessageDigest.getInstance(md);
byte[] bytes = messageDigest.digest(srcMsg.getBytes());
String encodedMsg = Hex.encodeHexString(bytes);
System.out.println(encodedMsg);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
/**
* Bouncy Castle MD算法实现
*
* @param srcMsg 加密消息
* @param digestClass 加密算法对应的实现类,支持的有:
* org.bouncycastle.crypto.digests.MD2Digest
* org.bouncycastle.crypto.digests.MD4Digest
* org.bouncycastle.crypto.digests.MD5Digest
*/
public static void bcMD(String srcMsg, Class<? extends Digest> digestClass) {
try {
Digest digest = digestClass.newInstance();
digest.update(srcMsg.getBytes(), 0, srcMsg.getBytes().length);
byte[] bytes =