博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
信息加密之消息摘要算法的MAC
阅读量:5956 次
发布时间:2019-06-19

本文共 1888 字,大约阅读时间需要 6 分钟。

  MAC是消息摘要算法的第三种实现方式,另外两种方式分别为:MD2\4\5、SHA。

MAC的jdk实现:1、默认密钥方式

private static void MAC_JDK(){        try {            KeyGenerator keyGenerator = KeyGenerator.getInstance("HmacMD5");//初始化KeyGenerator            SecretKey secretKey = keyGenerator.generateKey();//产生密钥            byte[] key = secretKey.getEncoded();//获得默认密钥                        SecretKey restorSecretKey = new SecretKeySpec(key, "HmacMD5");//还原密钥            Mac mac = Mac.getInstance(restorSecretKey.getAlgorithm());//示例化MAC            mac.init(restorSecretKey);//初始化MAC            byte[] hmacMD5Bytes = mac.doFinal(src.getBytes());//执行摘要            System.out.println("hmacMD5Byte : "+Hex.encodeHexString(hmacMD5Bytes));        } catch (Exception e) {            e.printStackTrace();        }        }

2、动态密钥方式:

private static void MAC_JDK_dongtai(){        try {            byte[] key = Hex.decodeHex(new char[]{'a','a','a','a','a','a','a','a','a','a'});//动态获得密钥                        SecretKey restorSecretKey = new SecretKeySpec(key, "HmacMD5");//还原密钥            Mac mac = Mac.getInstance(restorSecretKey.getAlgorithm());//示例化MAC            mac.init(restorSecretKey);//初始化MAC            byte[] hmacMD5Bytes = mac.doFinal(src.getBytes());//执行摘要            System.out.println("hmacMD5Byte : "+Hex.encodeHexString(hmacMD5Bytes));        } catch (Exception e) {            e.printStackTrace();        }        }

MAC的BC实现:

private static void MAC_BC(){        HMac hmac = new HMac(new MD5Digest());        hmac.init(new KeyParameter(org.bouncycastle.util.encoders.Hex.decode("aaaaaaaaaa")));        hmac.update(src.getBytes(), 0, src.getBytes().length);                byte[] mac_BC_Byte = new byte[hmac.getMacSize()];//执行摘要        hmac.doFinal(mac_BC_Byte, 0);        System.out.println("mac_BC_Byte : "+Hex.encodeHexString(mac_BC_Byte));    }

  到今天JAVA中的Base64、对称加密、消息摘要加密的实现总结就完工了,如果哪位对此感兴趣,还望多多交流。(1453296946@qq.com)

转载地址:http://tqexx.baihongyu.com/

你可能感兴趣的文章
【Interface&navigation】按钮(29)
查看>>
Extjs4.x (MVC)Controller中refs以及Ext.ComponentQuery解析
查看>>
Server-01 How to Find the Remote Desktop Port
查看>>
Java--接口、抽象与继承
查看>>
通过IP判断登录地址
查看>>
Oracle闪回技术
查看>>
利用单壁路由实现vlan间路由
查看>>
hello world
查看>>
CentOS 7 配置yum本地base源和阿里云epel源
查看>>
python 学习导图
查看>>
生成树
查看>>
(MYSQL) Unknown table 'a' in MULTI DELETE的解决办法
查看>>
作为一个程序员必备的素质
查看>>
Webpack入门教程十四
查看>>
HDU - 3564 Another LIS(LIS+线段树)
查看>>
深入浅出JavaScript (五) 详解Document.write()方法
查看>>
hibernate简单入门教程(四)---------关联映射
查看>>
去 IOE,MySQL 完胜 PostgreSQL
查看>>
++i 和 i++ 性能上的区别
查看>>
Mysql运维管理-一主多从宕机从库切换主库继续和从库同步过程16
查看>>