MAC(Message Authentication Code ,消息认证码算法)是含有密钥散列函数算法,兼容MD和SHA算法的特性,并在此基础上加入了密钥。因此,MAC也称为HMAC。
MAC算法集合了MD和SHA两大系列消息摘要算法。MD系列有HmacMD2、HmacMD4、HmacMD5三种算法。SHA系列的有HmacSHA1、HmacSHA224、HmacSHA256、HmacSHA384、HmacSHA512这五种算法。MAC算法摘要值的长度与具体的摘要算法的长度一直。
如HmacMD5即使对应MD5算法的摘要值长度128位。具体如下:
MAC算法的实现
1、Java 自带类实现
注意:Java自动类仅支持HmacMD5、HmacSHA1、HmacSHA256、HmacSHA384、HmacSHA512这几种算法
Mac算法是带有密钥的消息摘要算法,所以其实现分两步
1)创建密钥
2)获得消息摘要
具体实现代码如下:
/** *1、创建密钥 */ //创建对应摘要算法(如MD5\SHA1\SHA256等)密钥生成器对象KeyGenerator KeyGenerator keyGenerator = KeyGenerator.getInstance("HmacMD5"); //产生密钥 SecretKey secretKey = keyGenerator.generateKey(); //得到密钥的字节数组 //byte[] key = secretKey.getEncoded(); /** * 2、根据密钥产生mac摘要 */ //创建对应摘要算法(如MD5\SHA1\SHA256等)的Mac实例对象 Mac mac = Mac.getInstance(secretKey.getAlgorithm()); //初始化该mac实例对象的密钥 mac.init(secretKey); //获取mac摘要信息 byte[]result = mac.doFinal("中国".getBytes()); System.out.println(toHexString(result)); |