原视频地址 Imooc_Java实现消息摘要算法加密_4-1 消息摘要算法MAC实现与应用
package HMAC; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import javax.crypto.KeyGenerator; import javax.crypto.Mac; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.DecoderException; import org.apache.commons.codec.binary.Hex; import org.bouncycastle.crypto.digests.MD5Digest; import org.bouncycastle.crypto.macs.HMac; import org.bouncycastle.crypto.params.KeyParameter; public class Hmac { private static String src = "imooc security hmac"; public static void main(String[] args) { jdkHmacMD5(); bcHmacMD5(); }//main方法结束 public static void jdkHmacMD5(){ try { //初始化KeyGenerator KeyGenerator keygenerator = KeyGenerator.getInstance("HmacMD5"); //调用方法生成密匙secretKey 产生秘钥 SecretKey secretKey = keygenerator.generateKey(); //随机获得秘钥 // byte[] key = secretKey.getEncoded(); //手动设置秘钥 byte[] key = Hex.decodeHex(new char[]{'a','a','a','a','a','a','a','a','a','a'}); //还原秘钥 SecretKeySpec(要还原的秘钥,获得该秘钥的算法名字) SecretKey restoreSecretKey = new SecretKeySpec(key, "HmacMD5"); //实例化MAC Mac mac = Mac.getInstance(restoreSecretKey.getAlgorithm()); //初始化MAC try { mac.init(restoreSecretKey); } catch (InvalidKeyException e) { // TODO Auto-generated catch block } //执行消息摘要 byte[] hmacMD5Bytes = mac.doFinal(src.getBytes()); System.out.println("jdk hmacMD5:"+Hex.encodeHexString(hmacMD5Bytes)); } catch (Exception e) { e.printStackTrace(); } }//jdkHmacMD5方法结束 public static void bcHmacMD5(){ //声明Hmac HMac hmac = new HMac(new MD5Digest()); //初始化hamc hmac.init(new KeyParameter(org.bouncycastle.util.encoders.Hex.decode("aaaaaaaaaa"))); //初始化内容 hmac.update(src.getBytes(), 0, src.getBytes().length); //执行消息摘要 拿到结果 byte[] hmacMD5Bytes = new byte[hmac.getMacSize()]; hmac.doFinal(hmacMD5Bytes, 0); System.out.println("bc hmacMD5:"+org.bouncycastle.util.encoders.Hex.toHexString(hmacMD5Bytes)); } }//Hmac结束