详细分析JAVA加解密算法(5)

上面介绍的3种加密技术,每一种都有自己的特点,比如散列技术用于特征值提取,对称加密速度虽快但是有私匙泄露的危险,非对称加密虽然安全但是速度却慢。基于这些情况,现在的加密技术更加趋向于将这些加密的方案组合起来使用,基于此来研发新的加密算法。

MAC(Message Authentication Code,消息认证码算法)是含有密钥散列函数算法,兼容了MD和SHA算法的特性,并在此基础上加上了密钥。因此MAC算法也经常被称作HMAC算法。MAC(Message Authentication Code,消息认证码算法)是含有密钥散列函数算法,HMAC加密可以理解为加盐的散列算法,此处的“盐”就相当于HMAC算法的秘钥。

HMAC算法的实现过程需要一个加密用的散列函数(表示为H)和一个密钥。

经过MAC算法得到的摘要值也可以使用十六进制编码表示,其摘要值得长度与实现算法的摘要值长度相同。例如 HmacSHA算法得到的摘要长度就是SHA1算法得到的摘要长度,都是160位二进制数,换算成十六进制的编码为40位。

MAC算法的实现:

算法   摘要长度   备注  
HmacMD5   128   JAVA6实现  
HmacSHA1   160   JAVA6实现  
HmacSHA256   256   JAVA6实现  
HmacSHA384   384   JAVA6实现  
HmacSHA512   512   JAVA6实现  
HmacMD2   128   BouncyCastle实现  
HmacMD4   128   BouncyCastle实现  
HmacSHA224   224   BouncyCastle实现  

过程如下:

在密钥key后面添加0来创建一个长为B(64字节)的字符串(str);

将上一步生成的字符串(str) 与ipad(0x36)做异或运算,形成结果字符串(istr);

将数据流data附加到第二步的结果字符串(istr)的末尾;

做md5运算于第三步生成的数据流(istr);

将第一步生成的字符串(str) 与opad(0x5c)做异或运算,形成结果字符串(ostr),再将第四步的结果(istr) 附加到第五步的结果字符串(ostr)的末尾做md5运算于第6步生成的数据流(ostr),最终输出结果(out)

注意:如果第一步中,key的长度klen大于64字节,则先进行md5运算,使其长度klen = 16字节。

JDK中的实现:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/c1178b5624d9039f0d98a86ac0af3a8a.html