package com.imooc.security.hmac;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
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;
/**
* 消息摘要加密算法
* @author Bingo_Ge
* MAC融合MD/SHA-->HMAC(含有密钥的散列函数算法)
*/
public class ImoocHmac {
private static String src = "imooc security hmac";
public static void main(String[] args) {
jdkHmacMD5();
bcHmacMD5();
}
public static void jdkHmacMD5() {
try {
// KeyGenerator keyGenerator = KeyGenerator.getInstance("HmacMD5"); //初始化
// SecretKey secretKey = keyGenerator.generateKey(); // 生成密钥
// byte[] key = secretKey.getEncoded(); //获得密钥
byte[] key = Hex.decodeHex(new char[]{'a','a','a','a','a','a','a','a','a','a'}); //自定义密钥
SecretKey restoreSecretKey = new SecretKeySpec(key, "HmacMD5"); //还原密钥
Mac mac = Mac.getInstance(restoreSecretKey.getAlgorithm()); //实例化mac
mac.init(restoreSecretKey); //初始化mac
byte[] hmacMD5Bytes = mac.doFinal(src.getBytes()); //执行摘要
System.out.println("jdk hmacMD5:" + Hex.encodeHexString(hmacMD5Bytes));
} catch (Exception e) {
e.printStackTrace();
}
}
public static void bcHmacMD5() {
HMac hMac = new HMac(new MD5Digest());
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));
}
}
消息摘要加密算法MAC
最新推荐文章于 2021-07-24 23:37:24 发布