package cn.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.binary.Hex;
import org.bouncycastle.crypto.digests.MD5Digest;
import org.bouncycastle.crypto.macs.HMac;
import org.bouncycastle.crypto.params.KeyParameter;
/**
* 使用HMAC方式实现消息摘要加密
* @author Aaryn 2017年10月24日
*
*/
public class TestHMAC {
private static String src = "testHMAC firefox";
public static void main(String[] args) {
testHMAC();
bcHMAC();
}
public static void testHMAC() {
try {
// 1.初始化KeyGenerator
KeyGenerator kg = KeyGenerator.getInstance("HmacMD5");
// 2. 产生密钥
SecretKey generateKey = kg.generateKey();
// 3. 获得密钥
byte[] encoded = generateKey.getEncoded();
// 4.还原密钥
SecretKey restoSecretKey = new SecretKeySpec(encoded, "HmacMD5");
// 5.实例化MAC
Mac mac = Mac.getInstance(restoSecretKey.getAlgorithm());
// 6.初始化 MAC
mac.init(restoSecretKey);
// 7.执行摘要
byte[] doFinal = mac.doFinal(src.getBytes());
System.out.println("jdk HmacMD5-->" + Hex.encodeHexString(doFinal));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
}
}
public static void bcHMAC() {
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[] doFinal = new byte[hmac.getMacSize()];
hmac.doFinal(doFinal, 0);
System.out.println
消息摘要算法加密(代码实现)
最新推荐文章于 2024-07-01 13:47:26 发布