HmacSHA256摘要算法
2024-10-21 11:48:52
mac(Message Authentication Code,消息认证码算法)是含有密钥散列函数算法,兼容了MD和SHA算法的特性,并在此基础上加上了密钥。
甲乙双方进行数据交换可以采取如下流程完成
1、甲方向乙方公布摘要算法(就是指定要使用的摘要算法名)
2、甲乙双方按照约定构造密钥,双方拥有相同的密钥(一般是一方构造密钥后通知另外一方,此过程不需要通过程序实现,就是双方约定个字符串,但是这个字符串可不是随便设定的,也是通过相关算法获取的)
3、甲方使用密钥对消息做摘要处理,然后将消息和生成的摘要消息一同发送给乙方
4、乙方收到消息后,使用甲方已经公布的摘要算法+约定好的密钥 对收到的消息进行摘要处理。然后比对自己的摘要消息和甲方发过来的摘要消息。甄别消息是否是甲方发送过来的
import java.nio.charset.Charset; import javax.crypto.KeyGenerator; import javax.crypto.Mac; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; /** * MAC消息摘要组件 * * */ public class MACCoder { private static final Charset UTF_8 = Charset.forName("UTF-8"); /** * 初始化HmacSHA256的密钥 * @return byte[] 密钥 * * */ public static byte[] initHmacSHA256Key() throws Exception{ //初始化KeyGenerator KeyGenerator keyGenerator=KeyGenerator.getInstance("HmacSHA256"); //产生密钥 SecretKey secretKey=keyGenerator.generateKey(); //获取密钥 return secretKey.getEncoded(); } public static byte[] encodeHmacSHA256_2(byte[] data1,byte[] key) throws Exception{ SecretKey secretKey=new SecretKeySpec(key,"HmacSHA256"); Mac mac=Mac.getInstance(secretKey.getAlgorithm()); mac.init(secretKey); mac.update(data1); return mac.doFinal(); } /** * 进行相关的摘要算法的处理展示 * @throws Exception * **/ public static void main(String[] args) throws Exception { String str="2019-12-09T02:27:42-07:00"; System.out.println("原文="+str); byte[] key=MACCoder.initHmacSHA256Key(); //byte[] key="0X84NSTAokzW1iWCCLFIzP1JYv1utSUT".getBytes(UTF_8); byte[] datas=MACCoder.encodeHmacSHA256_2(str.getBytes(UTF_8), key); System.out.println("HmacSHA256的密钥:"+key.toString()); System.out.println("HmacSHA256算法摘要:"+new String(datas)); System.out.println(); } }
输出:
原文=2019-12-09T02:27:42-07:00 HmacSHA256的密钥:[B@1ff8b8f HmacSHA256算法摘要:�
--END-- 2019-12-10 10:15
最新文章
- angular源码阅读,依赖注入的原理:injector,provider,module之间的关系。
- MySQL提示符含义
- 源码安装Postgresql9.4.1
- 串口发送浮点型数据及int(2个字节)long int(4个字节)的方法
- 会话—session
- Xamarin自定义布局系列——瀑布流布局
- LPC 语言基础
- zabbix误报交换机重启
- 我的学习目标(目前已初步学习完Java语言基础)
- 【Python语言】Python介绍
- HashMap是如何工作的
- js的字符串代码库及讲解
- Spring Cloud(Dalston.SR5)--Zuul 网关-过滤器
- openstack(Pike 版)集群部署(五)--- Neutron 部署
- native与ascii互转
- linux网络编程--网络编程的基本函数介绍与使用【转】
- C语言sscanf用法解析与正则表达式支持
- 【Codeforces】Codeforces Round #491 (Div. 2) (Contest 991)
- WIN7提示“您已使用临时配置文件登陆”的解决方案
- makefile之strip函数
热门文章
- Django——Xadmin中的功能
- Kotlin属性揭秘与延迟初始化特性
- java.lang.IllegalArgumentException: No enum constant org.apache.ibatis.type.JdbcType.Integer
- memcached的缺点
- vue-cli 3 按需引入 element-ui
- 创建型模式(四) 建造者\生成器模式(Builder)
- Ubuntu安装Apache 2.4.7常见问题解答
- 任何人都适合的常用Chrome插件(工欲善其事必先利其器)
- django使用redis
- Appium环境搭建(Mac)