Hmac算法
Hmac算法就是一种基于密钥的消息认证码算法,它的全称是Hash-based Message Authentication Code,是一种更安全的消息摘要算法。
Hmac算法总是和某种哈希算法配合起来用的。例如,我们使用MD5算法,对应的就是HmacMD5算法,它相当于“加盐”的MD5。
因此,HmacMD5可以看作带有一个安全的key的MD5。使用HmacMD5有如下好处:
- HmacMD5使用的key长度是64字节,更安全;
- Hmac是标准算法,同样适用于SHA-1等其他哈希算法;
- Hmac输出和原有的哈希算法长度一致。
可见,Hmac本质上就是把key混入摘要的算法。验证此哈希时,除了原始的输入数据,还要提供key。
为了保证安全,我们不会自己指定key,而是通过Java标准库的KeyGenerator生成一个安全的随机的key。下面是使用HmacMD5的代码:
public class TestDemo { public static void main(String[] args) throws Exception { //通过名称HmacMD5获取KeyGenerator实例 KeyGenerator keyGen = KeyGenerator.getInstance("HmacMD5"); //通过KeyGenerator创建一个SecretKey实例 SecretKey key = keyGen.generateKey(); // 打印随机生成的key: byte[] skey = key.getEncoded(); System.out.println(new BigInteger(1, skey).toString(16)); // 通过名称HmacMD5获取Mac实例 Mac mac = Mac.getInstance("HmacMD5"); //用SecretKey初始化Mac实例 mac.init(key); //对Mac实例反复调用update(byte[])输入数据 mac.update("HelloWorld".getBytes("UTF-8")); //调用Mac实例的doFinal()获取最终的哈希值 byte[] result = mac.doFinal(); System.out.println(new BigInteger(1, result).toString(16)); } }
MC❤涛