当前位置: 首页 > news >正文

HTTP API 认证技术详解(四):HMAC Authentication

目录

什么是 HMAC Authentication 认证

HMAC Authentication 原理

HMAC Authentication 认证的步骤

使用 Golang 实现 HMAC Authentication 认证

HMAC Authentication 认证的安全性

HMAC 认证的最佳实践

小结


HTTP API 认证技术主要用于验证客户端身份,并确保只有经过授权的实体才能访问受保护的资源。随着安全需求的日益增长,API 认证技术也在不断发展和演进。本文将详细讲解 HMAC Authentication 认证技术。

什么是 HMAC Authentication 认证

HMAC(Hash-based Message Authentication Code)认证是一种被广泛使用的技术,用于验证消息的完整性和真实性。HMAC 结合了哈希函数和加密密钥,比单纯的哈希更安全。在网络通信和数据存储中,HMAC 可以确保传输的数据未被篡改,并验证消息发送者的身份。

HMAC Authentication 原理

HMAC 认证使用一个密钥和一个哈希函数,通过将密钥与消息结合,生成一个唯一的签名。当接收方收到消息时,使用相同的密钥和哈希函数计算新的签名并和接收到的这个签名做对比,以验证消息的完整性和来源。

HMAC Authentication 认证的步骤

  1. 选择哈希函数和生成密钥,常见的哈希函数包括 SHA-256、SHA-1 和 MD5 等。SHA-256 是目前推荐使用的。密钥需要随机生成、长度足够长(至少与哈希函数的输出一样长),并且要妥善保管。
  2. 客户端将要发送的数据(如 HTTP 请求的方法、请求内容、header 等)按照一定的规则排序后,使用密钥和哈希函数计算出一个 HMAC 签名,将这个签名随同请求数据一同发送给服务端。
  3. 服务端收到请求后,将接收到的数据(如 HTTP 请求的方法、请求内容、header 等) 按照和客户端一样的规则进行排序,使用同样的密钥和哈希函数生成一个新的签名。
  4. 如果服务端生成的签名与接收到的签名匹配,则认为消息是完整无误且来自合法的客户端。

使用 Golang 实现 HMAC Authentication 认证

在 Golang 中,可以使用 crypto/hmac 和 crypto/sha256 包来实现 HMAC 认证。简单示例代码如下:

package mainimport ("crypto/hmac""crypto/sha256""encoding/hex""fmt"
)func ComputeHmac256(message string, secret string) string {key := []byte(secret)h := hmac.New(sha256.New, key)h.Write([]byte(message))return hex.EncodeToString(h.Sum(nil))
}func VerifyHmac256(message, receivedHmac, secret string) bool {expectedHmac := ComputeHmac256(message, secret)return hmac.Equal([]byte(receivedHmac), []byte(expectedHmac))
}func main() {secret := "luduoxin'blog"message := "Hello, HMAC!"// Sender computes HMAChmac := ComputeHmac256(message, secret)fmt.Printf("Generated HMAC: %s\n", hmac)// Receiver verifies HMACisValid := VerifyHmac256(message, hmac, secret)fmt.Printf("HMAC is valid: %v\n", isValid)
}

HMAC Authentication 认证的安全性

HMAC 认证的安全性取决于几个因素:

  • 密钥的安全性:密钥需要随机生成,长度足够长(至少与哈希函数的输出长度一致),并且要妥善保管。
  • 哈希函数的强度:使用的哈希函数应该是当前被认为安全的,例如 SHA-256 或更高版本。
  • 传输的安全性:尽管 HMAC 保证了消息的完整性,但并不提供加密。因此,敏感信息应通过安全的通道(如 HTTPS)传输。
  • 时间安全的比较:比较 HMAC 时应该使用时间安全的方法,以防止时序攻击。在上面的 Golang 代码示例中,使用了 hmac.Equal 来进行比较,因为这是一个时间安全的比较函数。

HMAC 认证的最佳实践

  • 定期更换密钥:定期更换密钥可以降低密钥泄露的风险。
  • 限制 HMAC 的有效期:为 HMAC 添加一个时间戳,并在服务器端验证其有效期,以防止重放攻击。
  • 错误处理:在认证失败时,应该谨慎地处理错误,避免泄露任何可能有助于攻击者的信息。

小结

HMAC 认证是一种实用且安全的身份验证机制,可以有效防止数据在传输过程中被篡改的问题和非授权访问问题。

相关文章:

HTTP API 认证技术详解(四):HMAC Authentication

目录 什么是 HMAC Authentication 认证 HMAC Authentication 原理 HMAC Authentication 认证的步骤 使用 Golang 实现 HMAC Authentication 认证 HMAC Authentication 认证的安全性 HMAC 认证的最佳实践 小结 HTTP API 认证技术主要用于验证客户端身份,并确保…...

如何绘制出图像的色素分布直方图

效果 如图,可以展示出我们的图像的颜色分布直方图,表明的图像的亮和暗 实现可视化色素分布直方图方法 这里我们对我们的灰色图片和彩色图片进行了直方图显示 import cv2 import matplotlib.pyplot as plt image cv2.imread("test.jpg") # 彩色图片->…...

esp32-c-简单应用笔记

1、资料 ESP32 开发环境 Espressif-IDE: https://blog.csdn.net/chuner0425/article/details/123466848 https://blog.csdn.net/bin_zhang1/article/details/129993820?utm_mediumdistribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-1299938…...

What is `XSS` does?

跨站脚本攻击(Cross-Site Scripting,XSS)是一种针对网站应用程序的安全漏洞,允许攻击者将恶意脚本注入到其他用户查看的网页中。当这些用户访问受感染的页面时,他们的浏览器会执行这些恶意脚本,导致各种安全…...

【文档数据库】ES和MongoDB的对比

目录 1.由文档存储牵出的问题 2.什么是MongoDB? 3.ES和MongoDB的对比 1.由文档存储牵出的问题 本文或者说关于mongodb的这个系列文章的源头: 前面我们聊过了分布式链路追踪系统,在基于日志实现的分布式链路追踪的方式seluthzipkin中为了…...

VUE工程化项目--vue组件化

组件化开发 & 根组件 : ① 组件化: 一个页面可以拆分成 一个个组件 ,每个组件有着自己独立的 结构、样式、行为 。 好处:便于 维护 ,利于 复用 → 提升 开发效率 。 组件分类:普通组件、根组件。 …...

iOS base64 转 data |图片Base64转NSData | UIImageView | UIImage

Api 接口返回 base64 图片字符串,需要显示在UIImageView 上。 假设 string类型的 base64ImageStr 为 api返回的 base64字符串 将base64字符串进行处理 //去除掉首尾的空白字符和换行字符NSString * img64 [img stringByTrimmingCharactersInSet:[NSCharacterSet …...

Unity面试笔记:Unity常见关键词概念

Unity面试笔记:Unity常见关键词概念 Invoke 延迟函数 和 Coroutine协程 和 Thread线程帧缓冲区(Frame buffer)颜色缓冲区(Color buffer)深度缓冲区(Depth buffer)模板缓冲区(Stencil…...

gRPC vs HTTP

性能 gRPC 消息使用 Protobuf(一种高效的二进制消息格式)进行序列化。 Protobuf 在服务器和客户端上可以非常快速地序列化。 Protobuf 序列化产生的有效负载较小,这在移动应用等带宽有限的方案中很重要。 gRPC 专为 HTTP/2(HTTP…...

vue 导出el-table表格数据

1.先安装 file-saver 、xlsx 组件 npm install file-saver -Snpm intsall xlsx -S 2.html 代码 <el-table :data"elTable" ref"" id"table-content"><el-table-column label"其他" align"center"></el-…...

【问题记录】AttributeError: module ‘numpy‘ has no attribute ‘bool‘

服务器上运行代码报错&#xff1a; /opt/conda/envs/clrnet/lib/python3.8/site-packages/imgaug-0.4.0-py3.8.egg/imgaug/augmenters/meta.py:3368: FutureWarning: In the future np.bool will be defined as the corresponding NumPy scalar. augmenter_active np.zeros((n…...

WordPress企业模板

首页大图wordpress外贸企业模板 橙色的wordpress企业模板 演示 https://www.zhanyes.com/waimao/6250.html...

Intel Quartus II IP之DP1.4 工程的创建与使用

前述&#xff1a; Win10电脑安装了Quartus 21.4&#xff0c;这可以满足绝大多数工程&#xff0c;特别是对于简单调用fifo/ram等的工程&#xff0c;但是想要学习Quartus的HDMI/DP等高速接口类IP&#xff0c;首先需要创建HDMI/DP IP的设计demo工程&#xff0c;此时还需要安装Ecl…...

k8s集群环境搭建以及插件安装

前置条件 终端工具MobaXterm很好用。 1、虚拟机三台&#xff08;ip按自己的网络环境相应配置&#xff09;(master/node) 节点ipk8s-master192.168.200.150k8s-node1192.168.200.151k8s-node2192.168.200.152 2、关闭防火墙(master/node) systemctl stop firewalld systemc…...

面试的那些事儿

先从面试来说 假如你是网申&#xff0c;你的简历必然会经过HR的筛选&#xff0c;一张简历HR可能也就花费10秒钟看一下&#xff0c;然后HR 就会决定你这一关是Fail还是Pass。 假如你是内推&#xff0c;如果你的简历没有什么优势的话&#xff0c;就算是内推你的人再用心&#x…...

ffmpeg音视频解码

ffmpeg音视频解码 一.编译ffmpeg1.安装vmware虚拟机2.vmware虚拟机安装linux操作系统3.安装ftp和fshell软件4.在Ubuntu&#xff08;Linux&#xff09;中编译Android平台的FFmpeg&#xff08; arm和x86 &#xff09;5.解压FFmpeg6.Android编译脚本&#xff08;1&#xff09;修改…...

uniapp uni.chooseLocation调用走失败那里,错误码:112

问题&#xff1a;我配置了百度上所有能配置的&#xff0c;一直调用不成功&#xff0c;如下图配置的 1:第一个 配置 代码&#xff1a; "permission": {"scope.userLocation": {"desc": "你的位置信息将用于小程序位置接口的效果展示"}…...

第一次开发基于SpringBoot的Java应用

第一次开发基于SpringBoot的Java应用 一、 方式1&#xff1a;IDEA创建New Project Spring Boot官方文档的Getting Started1、IDEA创建New Project2、Spring Boot官方文档的Getting Started2.1 Creating the POM &#xff08;实际是&#xff0c;更新pom.xml&#xff09;2.2 Add…...

回归预测 | Matlab实现MSADBO-CNN-LSTM基于改进蜣螂算法优化卷积神经网络-长短期记忆神经网络多特征回归预测

回归预测 | Matlab实现MSADBO-CNN-LSTM基于改进蜣螂算法优化卷积神经网络-长短期记忆神经网络多特征回归预测 目录 回归预测 | Matlab实现MSADBO-CNN-LSTM基于改进蜣螂算法优化卷积神经网络-长短期记忆神经网络多特征回归预测预测效果基本描述程序设计参考资料 预测效果 基本描…...

数据结构--排序

参考【算法】排序算法之希尔排序 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/122632213 1. 排序的定义 2. 插入排序 2.1 直接插入排序 在插入第i&#xff08;i>1)个记录时&#xff0c;前面的i-1个记录已经排好序 void insertSort(int r[],int n) {for(int i2;i<…...

别再只盯着KNN了:聊聊Wi-Fi指纹定位中那些被低估的匹配算法与实战选择

超越KNN&#xff1a;Wi-Fi指纹定位中的高阶匹配算法与工程化选型指南 商场里找不到心仪店铺的焦虑、仓库中耗时的手动货品盘点、医院里紧急设备定位的延迟——这些场景背后都指向同一个技术痛点&#xff1a;室内定位精度不足。当大多数开发者习惯性采用KNN算法时&#xff0c;我…...

UniAppX项目数据可视化升级:用lime-echart + ECharts打造高性能图表(从Vue2/Vue3到uni-app-x全流程)

UniAppX高性能数据可视化实战&#xff1a;lime-echart与ECharts的深度整合指南 当移动端数据可视化需求遭遇性能瓶颈时&#xff0c;UniAppX框架与lime-echart的组合正在成为技术决策者的新选择。本文将揭示如何在不同技术栈中实现图表渲染性能的突破性提升&#xff0c;从原理剖…...

别再只用Set5了!超分辨率模型训练,这5个开源数据集(DIV2K、Flickr2K等)的实战配置与对比

超分辨率模型训练&#xff1a;5个开源数据集的深度实战指南 在超分辨率研究领域&#xff0c;数据集的选择往往决定了模型性能的上限。许多开发者习惯性地使用Set5、Set14等小型数据集&#xff0c;却忽略了更丰富的数据资源可能带来的性能突破。本文将深入解析DIV2K、Flickr2K、…...

LibreHardwareMonitor:5分钟掌握免费开源硬件监控的终极指南

LibreHardwareMonitor&#xff1a;5分钟掌握免费开源硬件监控的终极指南 【免费下载链接】LibreHardwareMonitor Libre Hardware Monitor, home of the fork of Open Hardware Monitor 项目地址: https://gitcode.com/GitHub_Trending/li/LibreHardwareMonitor 想要实时…...

如何构建你的第一个Python高频交易模型:完整实战指南

如何构建你的第一个Python高频交易模型&#xff1a;完整实战指南 【免费下载链接】High-Frequency-Trading-Model-with-IB A high-frequency trading model using Interactive Brokers API with pairs and mean-reversion in Python 项目地址: https://gitcode.com/gh_mirror…...

深度解析模型调参三剑客:Temperature、Top-k与Top-p的实战应用

1. 理解调参三剑客的核心逻辑 第一次接触大模型参数调整时&#xff0c;我被Temperature、Top-k和Top-p这三个参数搞得晕头转向。直到在电商文案生成项目中踩了坑才明白&#xff1a;这三个参数就像烹饪时的火候控制&#xff0c;用对了能让AI输出事半功倍。 Temperature本质上是个…...

Qwen3-14B-Int4-AWQ助力运维智能化:日志分析与故障排查实战

Qwen3-14B-Int4-AWQ助力运维智能化&#xff1a;日志分析与故障排查实战 1. 运维工程师的日常痛点 凌晨三点&#xff0c;你的手机突然响起。系统告警显示某核心服务出现异常&#xff0c;你需要立即登录服务器查看日志。面对几十GB的日志文件&#xff0c;你不得不用grep、awk等…...

uniapp圆环进度条组件实战:从零到一打造个性化数据展示

Uniapp圆环进度条组件实战&#xff1a;从零到一打造个性化数据展示 在移动应用开发中&#xff0c;数据可视化是提升用户体验的关键因素之一。圆环进度条作为一种直观的数据展示方式&#xff0c;广泛应用于健身追踪、学习进度、任务完成度等场景。Uniapp作为跨平台开发框架&…...

FedMeta: Accelerating Federated Learning with Meta-Learning for Enhanced Privacy and Efficiency

1. FedMeta&#xff1a;当联邦学习遇上元学习 想象一下&#xff0c;你正在训练一个能识别手写数字的AI模型&#xff0c;但数据分散在成千上万个用户的手机里。传统联邦学习就像让每个用户都从头开始训练完整模型&#xff0c;既耗流量又费时间。而FedMeta的聪明之处在于——它让…...

NPU vs GPU:为什么你的AI项目需要专用神经网络处理器?

NPU vs GPU&#xff1a;为什么你的AI项目需要专用神经网络处理器&#xff1f; 当你在深夜调试一个实时人脸识别模型时&#xff0c;GPU风扇的轰鸣声是否让你担心电费账单&#xff1f;当部署在边缘设备的图像分类服务因为响应延迟被客户投诉时&#xff0c;是否考虑过硬件选型可能…...