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

【后端】HMAC签名

  • 定义
    HMAC(Hash-based Message Authentication Code)是一种基于哈希函数和密钥的消息认证机制,用于验证数据的完整性和来源身份。广泛应用于 API 请求签名、数据传输校验、身份认证等场景,是现代安全通信的核心技术之一
  • 核心概念
    输入:消息内容 + 密钥
    处理:通过哈希函数(如 SHA-256)进行两轮加密计算
    输出:一个固定长度的签名值(哈希值)
    只有拥有密钥的一方才能生成或验证这个签名,从而确保数据没有被篡改,也确实来自可信方。
    通常情况下,这些 X-Ca- 开头的请求头(包括 HMAC 签名)是由浏览器端 JavaScript 动态生成的,而不是后端直接传过来的。
    在某些平台(比如阿里云、AWS)中,签名是由后端生成并返回给前端使用。
  • 计算公式
    HMAC(K, M) = H((K ⊕ opad) || H((K ⊕ ipad) || M))
    K:密钥
    M:消息
    H:哈希函数(如 SHA-256)
    ⊕:异或操作
    opad / ipad:外部 / 内部填充常量
    这两轮哈希计算增强了安全性,防止长度扩展攻击等常见漏洞。
  • 应用场景
    API 请求签名 防止请求被篡改或伪造
    数据完整性校验 确保文件或消息未被修改
    身份认证 验证请求是否来自合法用户
    防重放攻击 结合时间戳和随机数,防止旧请求被重复利用
  • 举个例子
import crypto from 'crypto';function generateHMAC(message, secret) {return crypto.createHmac('sha256', secret).update(message).digest('base64');
}const signature = generateHMAC('GET /api/data?page=1', 'your_secret_key');
//如果将'your_secret_key和page进行关联,则只允许每一页对应一个,如果不对应则拒绝响应
//如果使用相同的消息(message)和相同的密钥(secret)则 HMAC结果是完全一致的,每次计算都会得到相同的签名值
console.log('HMAC-SHA256 签名:', signature);
http://www.xdnf.cn/news/16004.html

相关文章:

  • 【React 入门系列】React 组件通讯与生命周期详解
  • 替代Oracle?金仓数据库用「敢替力」重新定义国产数据库
  • Node.js:Web模块、Express框架
  • [hot 100]两数之和-Python3-Hash Table
  • 蔚来汽车视觉算法面试30问全景精解
  • MySQL:内置函数
  • 实现分布式锁
  • numpy的详细知识点,简单易懂
  • Redis持久化-AOF
  • Oracle数据恢复—Oracle数据库所在分区被删除后报错的数据恢复案例
  • Spring Boot 使用Jasypt加密
  • 【bug】ubuntu20.04 orin nx Temporary failure resolving ‘ports.ubuntu.com‘
  • Debug 与 Release 版本构建详解
  • Unity里的加力
  • 0722 数据结构顺序表
  • Linux系统权限全面解析:掌握你的数字王国钥匙
  • docker pull 用法
  • PHP获取淘宝拍立淘(以图搜图)API接口操作详解
  • CSS+JavaScript 禁用浏览器复制功能的几种方法
  • 【前端】ikun-pptx编辑器前瞻问题二: pptx的压缩包结构,以及xml正文树及对应元素介绍
  • SSL VPN技术
  • 基于 KeepAlived + HAProxy 搭建 RabbitMQ 高可用负载均衡集群
  • 傲软录屏 专业高清录屏软件 ApowerREC Pro 下载与保姆级安装教程!!
  • v0+claude+cursor构建初始脚手架
  • 嵌入式学习-土堆目标检测(2)-day26
  • MySQL中的多表查询和笛卡尔积问题
  • vscode,cursor,Trae终端不能使用cnpm、npm、pnpm命令解决方案
  • n1 armbian docker compose 部署aipan mysql
  • HTML结构解析
  • 防抖的实战例子 - 常用语echarts图中点击事件的例子