消息摘要算法-bouncy castle支持的MD4算法扩展

sun本身支持MD2和MD5,但是缺少进制转换与支持

 

bouncy castle对sun进行支持补充,提供了对MD4的算法,同时对十六进制转换提供了支持。

 

commons codec 只是针对MD5支持,并且支持16进制

 

但是大部分场景下我们都是使用MD5,毕竟MD5是经过MD4改良进来了。不过也有场景可能会用到MD4。那我们就将MD4消息摘要处理的代码展示下:

 

package com.ca.test; import java.security.MessageDigest; import java.security.Security; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.bouncycastle.util.encoders.Hex; /** * bouncy castle扩展支持的MD4的算法实现 * @author kongqz * */ public class MD4Coder { /** * MD4的消息摘要算法实现 * @param data 要做消息摘要的数据 * @return byte[] 消息摘要 * * */ public static byte[] encodeMD4(byte[] data) throws Exception{ Security.addProvider(new BouncyCastleProvider()); //初始化MessageDigest MessageDigest md=MessageDigest.getInstance("MD4"); return md.digest(data); } /** * MD4的消息摘要算法实现,转成16进制 * @param data 要做消息摘要的数据 * @return String 消息摘要 * * */ public static String encodeMD4Hex(byte[] data) throws Exception{ byte[] b= encodeMD4(data); return new String(Hex.encode(b)); } /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { String str="bouncycast 的消息摘要算法"; System.out.println("原文:"+str); byte[] data1=MD4Coder.encodeMD4(str.getBytes()); System.out.println("MD4的消息摘要算法值:"+data1.toString()); String data2=MD4Coder.encodeMD4Hex(str.getBytes()); System.out.println("MD4做十六进制编码处理的消息摘要算法值:"+data2); } } 控制台输出如下: 原文:bouncycast 的消息摘要算法 MD4的消息摘要算法值:[B@bfbdb0 MD4做十六进制编码处理的消息摘要算法值:ef11e6aed3adabbcc2e24f0ef7822570

你可能感兴趣的:(算法,exception,String,扩展,byte,hex)