消息摘要-mac
来源:互联网 发布:windows远程桌面工具 编辑:程序博客网 时间:2024/06/05 02:32
摘要分类:MD SHA MAC 常用于验证数据的完整性,是数据签名算法的核心算法
可以说MAC是在SHA MD基础上发展而来,现也称HMAC算法,兼容了MD和SHA算法的特性,HMAC 摘要长度等同SHA1算法的摘要长度,160位的二进制数!区别就是有无密钥
例子:jdk Hmac实现与Bouncy castle实现
package com.example.encryption;import org.apache.commons.codec.DecoderException;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;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;/** * @author xuanyouwu * @email xuanyouwu@163.com * @time 2016-05-14 20:05 */public class MacTest { private static String SrcData = "xuanyouwu"; public static void log(String s) { System.out.println("------>" + s); } public static void main(String[] args) throws Exception { log("jdk Hmac:" + jdkHmacMd5(SrcData)); log("jdk Hmac mykey:" + jdkHmacMd5WithMyKey(SrcData)); log("bc Hmac:" + bcHmacMD5(SrcData)); } //JDK 方式实现 默认密钥 private static String jdkHmacMd5(String src) { try { //初始化KeyGenerator KeyGenerator keyGenerator = KeyGenerator.getInstance("HmacMD5");//名称请参考图 //产生密钥 SecretKey secretKey = keyGenerator.generateKey(); //获取密钥 byte[] key = secretKey.getEncoded(); //还原密钥 SecretKey restoreKey = new SecretKeySpec(key, "HmacMD5"); //实例化MAC Mac mac = Mac.getInstance(restoreKey.getAlgorithm()); //初始化mac mac.init(restoreKey); //执行摘要 byte[] hamcMD5bytes = mac.doFinal(src.getBytes()); return Hex.encodeHexString(hamcMD5bytes); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } return ""; } //JDK 方式实现 自定义密钥 private static String jdkHmacMd5WithMyKey(String src) { try { //使用自定义密钥 byte[] key = Hex.decodeHex(new char[]{'a', 'b'});// 必须是16进制的字符,长度必须是2的倍数 //还原密钥 SecretKey restoreKey = new SecretKeySpec(key, "HmacMD5"); //实例化MAC Mac mac = Mac.getInstance(restoreKey.getAlgorithm()); //初始化mac mac.init(restoreKey); //执行摘要 byte[] hamcMD5bytes = mac.doFinal(src.getBytes()); return Hex.encodeHexString(hamcMD5bytes); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (DecoderException e) { e.printStackTrace(); } return ""; } // bouncy castle实现方式 private static String bcHmacMD5(String src) { HMac hMac = new HMac(new MD5Digest()); hMac.init(new KeyParameter(org.bouncycastle.util.encoders.Hex.decode("ab")));// 必须是16进制的字符,长度必须是2的倍数 hMac.update(src.getBytes(), 0, src.getBytes().length); byte[] bytes = new byte[hMac.getMacSize()]; hMac.doFinal(bytes, 0); return org.bouncycastle.util.encoders.Hex.toHexString(bytes); }}
运行结果:
------>jdk Hmac:6cd35433ba176fcf6fba69e43567242a
------>jdk Hmac mykey:6eceb961c0aaf966888a2d935d3b78dd
------>bc Hmac:6eceb961c0aaf966888a2d935d3b78dd
------>jdk Hmac mykey:6eceb961c0aaf966888a2d935d3b78dd
------>bc Hmac:6eceb961c0aaf966888a2d935d3b78dd
1 0
- 消息摘要-mac
- 消息摘要加密算法MAC
- 消息摘要算法-MAC算法系列
- 消息摘要算法-MAC算法系列
- 消息摘要算法-MAC算法系列
- 消息摘要算法MAC实现与应用
- 消息摘要、MAC(消息认证码)、数字签名扫盲贴
- Imooc_Java实现消息摘要算法加密_4-1 消息摘要算法MAC实现与应用
- java 基于MAC(消息验证码)的数字摘要
- 消息摘要(单项加密)之MD,SHA,MAC,RipeMD
- Base64算法,消息摘要算法-Base64,MD5,SHA,MAC加密
- 消息摘要
- Java 加密解密之消息摘要算法(MD5 SHA MAC)
- Java 加密解密之消息摘要算法(MD5 SHA MAC)
- 密码学4——Java 加密解密之消息摘要算法(MD5 SHA MAC)
- 密码学4——Java 加密解密之消息摘要算法(MD5 SHA MAC)
- Java 加密解密之消息摘要算法(MD5 SHA MAC)
- Java 加密解密之消息摘要算法(MD5 SHA MAC)
- rad hat安装Oracle
- 获取Apple设备语言的方式
- s5pv210 datasheet_system_BOOTING SEQUENCE
- 旋转数组找最小值
- Axis2 服务器端抛出ServiceClass object does not implement问题解决方法
- 消息摘要-mac
- Sass的知识点梳理
- QT实战:LOL模拟加点器
- HashMap实现原理
- 简析TCP的三次握手与四次分手
- 订制属于你的Fiddler
- linux设备驱动模型
- ProgressBar自定义图片拉伸的问题
- Httpservlet cannot be resolved to a type的原因与解决方法