4. 组合加密#上面介绍的3种加密技术 , 每一种都有自己的特点 , 比如散列技术用于特征值提取 , 对称加密速度虽快但是有私匙泄露的危险 , 非对称加密虽然安全但是速度却慢 。基于这些情况 , 现在的加密技术更加趋向于将这些加密的方案组合起来使用 , 基于此来研发新的加密算法 。
mac(Message Authentication Code , 消息认证码算法)是含有密钥散列函数算法 , 兼容了MD和SHA算法的特性 , 并在此基础上加上了密钥 。因此MAC算法也经常被称作HMAC算法 。MAC(Message Authentication Code , 消息认证码算法)是含有密钥散列函数算法 , HMAC加密可以理解为加盐的散列算法 , 此处的“盐”就相当于HMAC算法的秘钥 。
HMAC算法的实现过程需要一个加密用的散列函数(表示为H)和一个密钥 。
经过MAC算法得到的摘要值也可以使用十六进制编码表示 , 其摘要值得长度与实现算法的摘要值长度相同 。例如 HmacSHA算法得到的摘要长度就是SHA1算法得到的摘要长度 , 都是160位二进制数 , 换算成十六进制的编码为40位 。
MAC算法的实现:
算法摘要长度备注HmacMD5128JAVA6实现HmacSHA1160JAVA6实现HmacSHA256256JAVA6实现HmacSHA384384JAVA6实现HmacSHA512512JAVA6实现HmacMD2128BouncyCastle实现HmacMD4128BouncyCastle实现HmacSHA224224BouncyCastle实现
过程如下:
- 在密钥key后面添加0来创建一个长为B(64字节)的字符串(str);
- 将上一步生成的字符串(str) 与ipad(0x36)做异或运算 , 形成结果字符串(istr);
- 将数据流data附加到第二步的结果字符串(istr)的末尾;
- 做md5运算于第三步生成的数据流(istr);
- 将第一步生成的字符串(str) 与opad(0x5c)做异或运算 , 形成结果字符串(ostr) , 再将第四步的结果(istr) 附加到第五步的结果字符串(ostr)的末尾做md5运算于第6步生成的数据流(ostr) , 最终输出结果(out)
JDK中的实现:
Copypublic static void jdkHmacMD5() {try {// 初始化KeyGeneratorKeyGenerator keyGenerator = KeyGenerator.getInstance("HmacMD5");// 产生密钥SecretKey secretKey = keyGenerator.generateKey();// 获取密钥byte[] key = secretKey.getEncoded();//byte[] key = Hex.decodeHex(new char[]{'1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e'});// 还原密钥SecretKey restoreSecretKey = new SecretKeySpec(key, "HmacMD5");// 实例化MACMac mac = Mac.getInstance(restoreSecretKey.getAlgorithm());// 初始化MACmac.init(restoreSecretKey);// 执行摘要byte[] hmacMD5Bytes = mac.doFinal("data".getBytes());System.out.println("jdk hmacMD5:" + new String(hmacMD5Bytes));} catch (Exception e) {e.printStackTrace();}}
推荐阅读
- 字节跳动面试必会:快速选择算法,TopK问题最优解
- 大麦茶加山楂干的功效,大麦茶的功效与作用
- 插入排序算法解析
- PC微信逆向:自动保存加密的聊天图片
- 茶叶的功能介绍,茶叶深加工现代先进工艺的特点
- 茶品人品及公民品,热烈庆祝彩农茶再签贵州加盟商
- 让你的太极舞动得更加的流畅
- 淘宝客怎么做推广怎么加入 新开的淘宝店铺,自己怎样推广呢
- 淘宝店如何加入淘宝联盟 淘宝卖家怎么开通淘宝联盟
- iPhone4s怎么样iPhone4s怎么增加内存