【HMAC-SHA1算法以及工作原理】

在这里插入图片描述
曾梦想执剑走天涯,我是程序猿【AK】

在这里插入图片描述

目录

  • 简述概要
  • 知识图谱
  • 总结

简述概要

连接HMAC-SHA1工作原理以及工具代码

知识图谱

HMAC(Hash-based Message Authentication Code,基于散列的消息认证码)是一种结合了密钥和消息的认证方法,用于同时验证数据的完整性和数据的真实性。HMAC-SHA1 是 HMAC 算法的一种,它使用 SHA-1 散列函数。

HMAC-SHA1 的工作原理如下:

选择一个加密哈希函数(如 SHA-1)。
如果密钥长度大于哈希函数的块大小(对于 SHA-1 是 512 位),则先对密钥进行哈希处理;如果密钥长度小于块大小,则用零填充至块大小。
将处理后的密钥与一个内部的填充常量(ipad)进行异或运算,得到第一个密钥。
对消息进行处理,将消息与第一步得到的密钥进行异或运算。
对结果进行哈希处理。
将第一步得到的密钥与另一个外部的填充常量(opad)进行异或运算,得到第二个密钥。
对上一步的哈希结果与第二步得到的密钥进行异或运算。
对结果进行最终的哈希处理,得到最终的 HMAC 值。
以下是使用 Java 实现 HMAC-SHA1 的代码示例:

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;public class HmacSha1Example {public static String hmacSha1(String data, String key) throws NoSuchAlgorithmException, InvalidKeyException {// 获取HMAC-SHA1的Mac实例Mac sha1HMAC = Mac.getInstance("HmacSHA1");// 密钥转换为字节byte[] keyBytes = key.getBytes();// 使用给定的密钥初始化Mac对象SecretKeySpec secretKey = new SecretKeySpec(keyBytes, "HmacSHA1");sha1HMAC.init(secretKey);// 执行HMAC操作byte[] hashBytes = sha1HMAC.doFinal(data.getBytes());// 将得到的字节数组转换为十六进制字符串StringBuilder hexString = new StringBuilder();for (byte b : hashBytes) {String hex = Integer.toHexString(0xff & b);if (hex.length() == 1) {hexString.append('0');}hexString.append(hex);}// 返回Base64编码的字符串return Base64.getEncoder().encodeToString(hashBytes);}public static void main(String[] args) {try {String data = "The quick brown fox jumps over the lazy dog";String key = "secret";String hmacSha1 = hmacSha1(data, key);System.out.println("HMAC-SHA1: " + hmacSha1);} catch (NoSuchAlgorithmException | InvalidKeyException e) {e.printStackTrace();}}
}

在这个例子中,我们首先创建了一个 Mac 对象,指定使用 “HmacSHA1” 算法。然后,我们将密钥转换为字节,并创建一个 SecretKeySpec 对象来初始化 Mac 对象。接着,我们使用 doFinal 方法对数据进行 HMAC 操作。最后,我们将得到的字节数组转换为十六进制字符串,并使用 Base64 编码输出结果。

请注意,为了安全起见,不要在生产环境中使用 SHA-1,因为它已经被证明存在潜在的安全问题。在可能的情况下,使用更安全的哈希函数,如 SHA-256。

总结

引入链接,Github、Gitee等知识仓库



                                                                                                         ---- 永不磨灭的番号:我是AK



在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/703651.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

刚拿到的《HarmonyOS应用开发者高级认证》,全网整理的题目,将近300题,100%通过

刚拿到《HarmonyOS应用开发者高级认证》,现在把题目和答案分享一下,这些题目是我根据其他网站整理的,宁滥勿缺,有个别题目是重复的,抽半天时间看一下,应该是稳过的。当然建议还是先跟着文档学一下鸿蒙或者看…

Centos 7.5 上nginx设置开机自启动

nginx的安装目录 : /usr/local/nginx 一、没有设置开机自启动前,需要执行/usr/local/nginx/sbin/nginx 启动 二、接下来,我们设置开机自启动,就不用手动启动nginx了 1、cd /usr/lib/systemd/system/ 2、vi nginx.service [un…

如何在Win系统搭建Oracle数据库并实现远程访问【内网穿透】

文章目录 前言1. 数据库搭建2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射 3. 公网远程访问4. 配置固定TCP端口地址4.1 保留一个固定的公网TCP端口地址4.2 配置固定公网TCP端口地址4.3 测试使用固定TCP端口地址远程Oracle 前言 Oracle,是甲骨文公司的一款关系…

【深入理解设计模式】适配器设计模式

适配器设计模式 适配器设计模式是一种结构型设计模式,用于将一个类的接口转换成客户端所期望的另一个接口,从而使得原本由于接口不兼容而不能一起工作的类能够一起工作。适配器模式通常用于以下场景: 现有接口与需求不匹配:当需要…

Linux安装Mysql(超详细,亲测)

文章中的全部内容自己都有亲身实践,都是有效的,像常见登录错误中,那种错误的密码修改方式自己以前就浪费了很多事件,还有设置Mysql远程登录这些也是,所以我把这些操作整理了一下,让大家在安装和使用Mysql的…

多线程基础说明【基础篇】

目录 🌭1.相关概念 🍿2.创建和启动线程 🥞3.线程安全 🧈4.死锁 🥓5.线程通信的方法 1.相关概念 1.1程序 为完成特定任务,用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象…

都2024年了,软件测试面试都问什么?

1、最熟悉的 selenium 操作? 基本上 selenium 提供的一下几大类操作都能够灵活使用,比如说:八大元素定位方式、三大等待方式、用户点击、输入等常见操作、 还有窗口切换、iframe 切换操作,比如说 actionchains 文件上传、JS操作 等…

网站开发--详解Servlet

💕"Echo"💕 作者:Mylvzi 文章主要内容:网站开发–详解Servlet 一.基本介绍 tomcat是Java中开发服务器的重要的一个工具,任何开发的服务器都要部署在tomcat之上,可以说tomcat是所有服务器的底座,为了更好的操作http,to…

golang学习3,golang 项目中配置gin的web框架

1.go 初始化 mod文件 go mod init gin-ranking 2.gin的crm框架 go get -u github.com/gin-gonic/gin 3.go.mod爆红解决

前后端分离Vue+node.js在线学习考试系统gqw7o

与其它应用程序相比,在线学习平台的设计主要面向于学校,旨在为管理员和学生、教师、院系提供一个在线学习平台。学生、教师、院系可以通过系统及时查看公告信息等。 在线学习平台是在Windows操作系统下的应用平台。为防止出现兼容性及稳定性问题&#xf…

B站项目-基于Pytorch的ResNet垃圾图片分类

基于Pytorch的ResNet垃圾图片分类 数据集预处理 画图片的宽高分布散点图 import osimport matplotlib.pyplot as plt import PIL.Image as Imagedef plot_resolution(dataset_root_path):image_size_list []#存放图片尺寸for root, dirs, files in os.walk(dataset_root_pa…

装配制造业的MES系统种的物料齐套技术

装配是制造企业涉及产品生产加工最为普遍的一种模式,包括汽车、电子、电器、电气等行业。经研究表明,装配在整个产品制造总成本中所占比例超过了50%,所占用的总生产时间比例在40%-60%,直接影响着产品质量和成本。装配制造非常强调…

树-王道-复试

树 1.度: 树中孩子节点个数,所有结点的度最大值为 树的度 2.有序树: 逻辑上看,树中结点的各子树从左至右是有次序的,不能互换。 **3.**树的根节点没有前驱,其他节点只有一个前驱 **4.**所有节点可有零个或…

Leetcoder Day23| 回溯part03:组合+分割

语言:Java/Go 39. 组合总和 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的所有不同组合 ,并以列表形式返回。你可以按任意顺序返回这些组合。 candidates 中的同一个…

环形光源让图像质量瞬间提升,一探究竟吧!

光源对机器视觉检测系统的性能起着重要作用,精确的光学结构设计可以提高捕获图像的质量,准确地分离目标和背景信息,不充足的光线会使捕捉到的图像无法满足需求,针对不同的检测对象,不同的形状光源应运而生。我们来看看最常用的LED光源之一—环形光源。 环形光源&…

vue3 使用pina

一、Vue 3 项目中集成Pina 状态管理库 要在 Vue 3 项目中使用 Pina(Vue 3 状态管理库),您可以按照以下步骤操作: 1. 安装 Pina 库相应的插件: yarn add pinia # 或者使用 npm npm install pinia 2. 在您的 Vue 3 项…

电脑休眠之后唤不醒

现象:午休时间电脑休眠了,醒来之后发现在密码输入界面,但鼠标键盘没反应。按重启键或电源机重新开机,结果开不了机。 原因:1、内存条脏了,导致内存条读取失败 2、休眠的时候硬盘休眠了,导致按…

AngularJS安装版本问题

一、安装 Angular CLI 脚手架安装命令: npm install -g angular/cli 在安装前请确保自己安装NodeJS环境版本为V18及以上,否则会因node版本问题导致项目无法正常运行。 脚手架安装后,已提示了当前node版本必须为18.13.0或大于20.9.0版本&…

git之分支管理

一.理解分支 我们看下面这张图片: 在版本回退⾥,你已经知道,每次提交,Git都把它们串成⼀条时间线,这条时间线就可以理解为是⼀个分⽀。截⽌到⽬前,只有⼀条时间线,在Git⾥,这个分⽀…

2024年 前端JavaScript入门到精通 第四天 笔记

4.1 函数的基本使用以及封装练习 ★ 函数命名规范 4.2 函数的参数以及默认参数 函数的灵魂!!! 4.3 函数封装数组求和案例 4.4 函数返回值return 4.5 函数返回值细节以及上午总结 4.6 函数返回值案例-求最大值和最 4.7 函数复习以及断点进入函…