揭秘HMAC验证机制:5步实现高安全性的消息签名与校验

HMAC算法详解 HMAC算法的数学公式为:其中:H 为密码Hash函数(如MD5或SHA-2),能够对明文进行分组循环压缩;k 为密钥(secret key);m 为要认证的消息;k’ 是从原始密钥 k 导出的另一个密钥(如果 k 短于散列函数的输入块大小,则向右填充零;如果比该块大小更长,则对 k 进行散列)ipad 内部填充(0x5C5C5C…5C5C,一段十六进制常量);opad 外部填充(0x363636…3636,一段十六进制常量) 阅读详情

第一章:HMAC验证机制的核心原理

HMAC(Hash-based Message Authentication Code)是一种基于哈希函数和密钥的消息认证码机制,用于确保数据的完整性与真实性。其核心思想是通过一个密钥与消息共同参与哈希运算,生成唯一认证码,接收方使用相同密钥重新计算并比对结果,从而验证消息是否被篡改。

工作流程概述

  • 发送方将原始消息与共享密钥结合,使用特定哈希算法(如SHA-256)生成HMAC值
  • HMAC值随消息一同传输,不包含密钥本身
  • 接收方使用相同密钥和算法重新计算HMAC,并与接收到的HMAC对比

典型实现示例(Go语言)

// 使用标准库crypto/hmac生成HMAC-SHA256
package main

import (
    "crypto/hmac"
    "crypto/sha256"
    "encoding/hex"
    "fmt"
)

func generateHMAC(message, secret string) string {
    key := []byte(secret)
    h := hmac.New(sha256.New, key)
    h.Write([]byte(message))
    return hex.EncodeToString(h.Sum())
}

func main() {
    msg := "Hello, HMAC!"
    secret := "my-secret-key"
    signature := generateHMAC(msg, secret)
    fmt.Println("HMAC:", signature)
}

安全性优势对比

特性HMAC普通哈希
防篡改支持(依赖密钥)仅校验内容变化
身份认证支持不支持
重放攻击防护需配合时间戳/nonce无
graph LR A[原始消息] --> B{HMAC计算} C[共享密钥] --> B B --> D[HMAC签名] D --> E[传输通道] E --> F[接收端验证]

第二章:HMAC算法基础与安全性分析

2.1 HMAC的构造原理与密码学基础

HMAC(Hash-based Message Authentication Code)是一种基于哈希函数和密钥的消息认证码,其核心思想是结合密码学哈希函数(如SHA-256)与共享密钥,确保消息完整性与身份验证。
构造流程
HMAC通过两次哈希运算增强安全性:首先使用密钥与内部填充(ipad)异或,再与消息拼接后进行第一次哈希;然后将结果与外部填充(opad)和密钥异或后的值拼接,执行第二次哈希。
// Go语言中HMAC-SHA256示例
package main

import (
    "crypto/hmac"
    "crypto/sha256"
    "fmt"
)

func main() {
    key := []byte("secret-key")
    message := []byte("Hello, world!")

    h := hmac.New(sha256.New, key)
    h.Write(message)
    result := h.Sum(nil)

    fmt.Printf("%x\n", result)
}
上述代码中,hmac.New 初始化HMAC结构,使用SHA-256作为底层哈希算法。密钥 key 参与哈希过程,确保输出不可伪造。最终摘要长度为256位(32字节),以十六进制打印。
安全特性
  • 抗碰撞:依赖底层哈希函数的安全性
  • 密钥依赖:无密钥无法生成有效MAC
  • 防止长度扩展攻击:双重哈希结构阻断此类攻击路径

2.2 哈希函数的选择与安全影响

哈希函数的基本要求
一个安全的哈希函数必须具备抗碰撞性、原像抵抗和第二原像抵抗等特性。选择不当可能导致数据完整性受损或身份伪造。
常见哈希算法对比
算法输出长度安全性应用场景
MD5128位低(已破解)校验非敏感数据
SHA-1160位中(不推荐)遗留系统
SHA-256256位高SSL证书、区块链
代码实现示例
package main

import (
    "crypto/sha256"
    "fmt"
)

func main() {
    data := []byte("hello world")
    hash := sha256.Sum256(data)
    fmt.Printf("%x\n", hash) // 输出:b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
}
该示例使用 Go 语言调用 SHA-256 算法对字符串“hello world”进行哈希计算。`Sum256` 函数返回固定 32 字节的哈希值,具有强抗碰撞性,适用于高安全场景。

2.3 密钥管理在HMAC中的关键作用

密钥是HMAC(Hash-based Message Authentication Code)安全性的核心。一个强密钥能有效防止伪造消息和重放攻击。
密钥生成的最佳实践
应使用密码学安全的随机数生成器创建密钥,避免使用可预测的数据如时间戳或简单密码。
密钥存储与保护
  • 密钥不应硬编码在源码中
  • 推荐使用密钥管理服务(KMS)进行集中管理
  • 内存中密钥应加密并及时清除
// Go语言示例:使用HMAC-SHA256
package main

import (
    "crypto/hmac"
    "crypto/sha256"
    "encoding/hex"
)

func generateHMAC(message string, key []byte) string {
    h := hmac.New(sha256.New, key)
    h.Write([]byte(message))
    return hex.EncodeToString(h.Sum(nil))
}
上述代码中,hmac.New(sha256.New, key) 使用密钥初始化HMAC对象,密钥长度建议不小于SHA-256的块大小(64字节),以确保安全性。

2.4 对比MAC、数字签名与HMAC的应用场景

在安全通信中,消息认证码(MAC)、数字签名和HMAC分别适用于不同安全需求场景。
核心机制差异
  • MAC:基于共享密钥,验证消息完整性与来源真实性;
  • HMAC:MAC的具体实现,结合哈希函数与密钥,广泛用于API鉴权;
  • 数字签名:基于非对称加密,提供不可否认性,适用于法律级凭证。
典型应用场景对比
机制密钥类型性能主要用途
MAC对称密钥高内部系统间数据校验
HMAC对称密钥高HTTP API 请求签名
数字签名非对称密钥较低软件发布、电子合同
代码示例:HMAC生成过程

package main

import (
    "crypto/hmac"
    "crypto/sha256"
    "encoding/hex"
)

func generateHMAC(message, secret string) string {
    key := []byte(secret)
    h := hmac.New(sha256.New, key)
    h.Write([]byte(message))
    return hex.EncodeToString(h.Sum(nil))
}
该函数使用SHA-256作为基础哈希算法,通过密钥与消息拼接生成固定长度的HMAC值,常用于请求签名防篡改。

2.5 常见攻击模式及HMAC的防御能力

重放攻击与数据篡改
攻击者可能截获合法通信数据并重复发送,或修改消息内容以欺骗系统。HMAC(基于哈希的消息认证码)通过密钥与消息内容共同生成摘要,确保数据完整性与来源可信。
HMAC的工作机制
使用共享密钥对消息进行哈希运算,接收方使用相同密钥验证HMAC值,若不匹配则拒绝处理。
// Go语言中生成HMAC示例
package main

import (
    "crypto/hmac"
    "crypto/sha256"
    "encoding/hex"
)

func generateHMAC(message, key string) string {
    h := hmac.New(sha256.New, []byte(key))
    h.Write([]byte(message))
    return hex.EncodeToString(h.Sum())
}
该代码使用SHA-256作为基础哈希函数,结合密钥生成固定长度的HMAC值。关键参数为密钥(key)和原始消息(message),输出为十六进制编码的摘要字符串,任何消息或密钥的变动都会导致输出显著变化。
  • HMAC可有效抵御中间人篡改
  • 配合时间戳可防止重放攻击

第三章:HMAC签名的代码实现步骤

3.1 环境准备与加密库选型

在构建安全的数据传输系统前,需确保开发环境支持现代加密标准。建议使用 Go 1.19+ 或 Python 3.10+ 等支持完整 TLS 1.3 协议栈的运行时环境。
主流加密库对比
库名称语言优势适用场景
OpenSSLC行业标准,广泛兼容底层系统集成
cryptographyPython易用性强,文档完善快速原型开发
NaCl/libsodiumC/C++默认安全配置,抗侧信道攻击高安全性要求场景
代码示例:初始化加密上下文
package main

import "golang.org/x/crypto/nacl/box"

// 使用 NaCl 实现密钥交换与加密
var publicKey, privateKey, err = box.GenerateKey(rand.Reader)
该代码段利用 `x/crypto/nacl/box` 生成 Ed25519 密钥对,适用于基于 Curve25519 的高效安全通信。`GenerateKey` 接收随机源,确保密钥不可预测性。

3.2 实现消息签名的核心逻辑

在分布式系统中,确保消息的完整性与来源可信是安全通信的关键。消息签名通过密码学手段为数据提供防篡改保障。
签名流程设计
消息签名通常包含以下步骤:
  • 对原始消息计算哈希值(如 SHA-256)
  • 使用发送方私钥对哈希值进行非对称加密
  • 将签名附加到原始消息中一并传输
代码实现示例
func SignMessage(message []byte, privateKey *rsa.PrivateKey) ([]byte, error) {
    hash := sha256.Sum256(message)
    signature, err := rsa.SignPKCS1v15(rand.Reader, privateKey, crypto.SHA256, hash[:])
    return signature, err
}
该函数接收消息和私钥,首先生成 SHA-256 哈希摘要,再使用 RSA-PKCS#1 v1.5 标准对摘要签名。参数说明:`message` 为待签数据,`privateKey` 必须符合 PKCS#8 编码规范。
验证机制
接收方使用对应公钥调用 `rsa.VerifyPKCS1v15` 验证签名一致性,确保消息未被篡改且来自合法持有者。

3.3 安全生成与存储共享密钥

在分布式系统中,共享密钥的安全性直接关系到整体通信的保密性。密钥必须通过高强度算法生成,并避免硬编码或明文存储。
安全密钥生成流程
使用密码学安全的随机数生成器(CSPRNG)创建密钥,确保不可预测性。例如在Go语言中:
import "crypto/rand"

func generateKey() ([]byte, error) {
    key := make([]byte, 32) // 256位密钥
    _, err := rand.Read(key)
    return key, err
}
该代码生成32字节的AES-256密钥,rand.Read 来自 crypto/rand 包,提供操作系统级熵源,保障随机性。
安全存储策略
  • 使用硬件安全模块(HSM)或可信执行环境(TEE)保护密钥
  • 密钥应加密存储,主密钥由KMS统一管理
  • 运行时避免将密钥写入日志或内存交换区

第四章:HMAC校验流程与实战应用

4.1 接收端的消息完整性校验

在分布式系统中,确保接收端消息的完整性是保障数据一致性的关键环节。为防止传输过程中出现数据篡改或丢失,通常采用哈希校验机制。
基于哈希的消息校验流程
发送方在发出消息前计算其摘要值,接收方重新计算并比对:
// 计算消息的SHA256哈希值
func calculateHash(message []byte) string {
    hash := sha256.Sum256(message)
    return hex.EncodeToString(hash[:])
}
该函数接收原始字节流,输出标准十六进制字符串。接收端执行相同算法,若本地哈希与附带哈希不一致,则判定消息被破坏。
校验失败处理策略
  • 丢弃异常消息,防止污染数据状态
  • 触发重传请求,保障最终一致性
  • 记录安全日志,用于审计与追踪
通过结合密码学哈希与明确的错误响应机制,系统可在不可信网络中维持高可靠性通信。

4.2 时间戳与防重放攻击处理

在分布式系统通信中,时间戳是抵御重放攻击的关键机制之一。通过为每个请求附加当前时间戳,服务端可判断请求的新鲜性,拒绝过期或重复的调用。
时间窗口验证策略
通常设定一个合理的时间窗口(如±5分钟),超出该范围的请求将被拒绝:
  • 客户端发送请求时嵌入UTC时间戳
  • 服务端校验时间差是否在允许范围内
  • 结合唯一请求ID防止同一时间戳重复使用
代码实现示例
func ValidateTimestamp(ts int64, windowSec int64) bool {
    now := time.Now().Unix()
    return abs(now-ts) <= windowSec
}

func abs(x int64) int64 {
    if x < 0 {
        return -x
    }
    return x
}
上述函数通过比较客户端时间戳与服务端当前时间的绝对差值,确保请求在指定时间窗口内有效。参数ts为客户端时间戳,windowSec定义允许的最大偏差秒数,提升系统安全性的同时兼顾网络延迟。

4.3 Web API中HMAC认证中间件设计

在构建高安全性的Web API服务时,HMAC(Hash-based Message Authentication Code)认证机制能有效防止请求被篡改或重放攻击。通过设计一个轻量级中间件,可在请求进入业务逻辑前完成身份验证与完整性校验。
中间件核心流程
  • 提取请求头中的API密钥与签名
  • 从数据库加载对应密钥的Secret Key
  • 使用HMAC-SHA256重新计算请求体与时间戳的签名
  • 安全比对签名并验证时间戳有效期(防重放)
func HMACAuthMiddleware(secretStore SecretProvider) gin.HandlerFunc {
    return func(c *gin.Context) {
        key := c.GetHeader("X-API-Key")
        sig := c.GetHeader("X-Signature")
        ts := c.GetHeader("X-Timestamp")

        secret, _ := secretStore.GetSecret(key)
        expectedSig := computeHMAC(c.Request.Body, secret, ts)

        if !hmac.Equal([]byte(sig), []byte(expectedSig)) || !isValidTimestamp(ts) {
            c.AbortWithStatus(401)
            return
        }
        c.Next()
    }
}
上述代码实现了基础认证逻辑,computeHMAC 负责生成预期签名,hmac.Equal 防止时序攻击,时间戳验证确保请求在5分钟内有效。

4.4 日志记录与失败请求追踪

结构化日志输出
为提升可观察性,系统采用 JSON 格式输出结构化日志,便于集中采集与分析。例如,在 Go 服务中使用 logrus 实现:
logger.WithFields(logrus.Fields{
    "request_id": "req-12345",
    "status":     500,
    "method":     "POST",
    "path":       "/api/v1/order",
}).Error("Failed to process request")
该日志条目包含关键上下文字段,如请求 ID、HTTP 方法和路径,有助于快速定位异常源头。
失败请求的链路追踪
通过集成分布式追踪系统(如 OpenTelemetry),自动为每个请求生成唯一 trace ID,并贯穿于微服务调用链中。结合 ELK 或 Loki 日志平台,支持基于 trace ID 聚合跨服务日志流。
  • 每条错误日志携带 trace_id 和 span_id
  • 网关层统一注入 request_id 到响应头
  • 前端报错时可提示用户记录 ID 以便排查

第五章:最佳实践与安全建议

最小权限原则的实施
在系统部署中,始终遵循最小权限原则。例如,Web 服务不应以 root 用户运行。创建专用用户并限制其访问范围:
# 创建无登录权限的服务用户
sudo useradd -r -s /bin/false appuser
sudo chown -R appuser:appuser /var/www/myapp
定期更新与依赖审计
使用自动化工具定期扫描依赖项中的已知漏洞。Node.js 项目可结合 npm audit 与 Snyk:
  • 每周执行 npm audit --audit-level=high
  • 将 Snyk 集成至 CI/流水线,阻断高危依赖合并
  • 锁定依赖版本,避免意外引入风险包
HTTPS 强制重定向配置
Nginx 中应强制所有 HTTP 请求跳转至 HTTPS,防止中间人攻击:

server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}
关键安全头设置
通过响应头增强客户端防护。以下为推荐配置:
HeaderValue
Strict-Transport-Securitymax-age=63072000; includeSubDomains
X-Content-Type-Optionsnosniff
Content-Security-Policydefault-src 'self'; script-src 'self' 'unsafe-inline'
日志监控与异常告警
部署集中式日志系统(如 ELK)收集认证失败、频繁404等异常行为。设置阈值触发告警:
登录失败 > 5次/分钟 → 触发邮件/SMS通知系统管理员
Hmac签名算法 其全程大概是:Hash Message Authentication Code(前面的Hash是后面的定语,这是一种基于Hash计算的签名方式,那它就支持一系列的hash算法)因为通常的比较操作,会在从头比到尾,直到发现不一致或者到达末尾就返回结果;其构建密钥,也分为根据外部密钥串构建字节切片和生成指定长的随机密钥。到这里,关于常用的关于常用的加解密、签名、摘要计算的介绍就翻篇了。既然理论上有这个风险,那开发者可以选择使用更安全的方式去比较。从理想的环境中看,每次计算到特定位置的时间是一致的。 阅读详情

相关推荐

hmac.new到底是有什么作用

hmac.new这个方法就是用一个秘钥,给一个签名消息进行加密的。是一个字节串,表示要计算HMAC的消息,如果不提供该参数,则默认为。是一个哈希算法对象,表示要用于计算HMAC的哈希算法,默认为。是一个字节串,表示用于生成HMAC的密钥;:返回计算出的HMAC值的十六进制字符串。该对象可用于计算一个消息的HMAC值。:返回计算出的HMAC值的字节串。一个密钥、一个签名消息、一个算法。方法创建了一个HMAC对象。方法将要计算的消息添加到。添加到要计算的消息中。方法计算出HMAC值,

浪漫韫秋 1273

HMAC的简单介绍

HMAC的详细流程介绍

m0_53558468的博客 5388

GO与KEGG富集分析实战:从差异基因到功能注释

本文详细介绍了GO与KEGG富集分析的完整实战流程,从差异基因列表出发,通过基因ID转换、核心分析到结果可视化,系统阐述了如何将基因数据转化为生物学洞察。文章重点讲解了使用R语言clusterProfiler包进行GO和KEGG富集分析的具体步骤、参数设置及常见问题解决方案,并强调了结果解读与生物学故事构建的方法,帮助研究者深入理解差异基因的集体功能倾向。

weixin_29291863的博客 918

HMAC概述

1.简介 HMAC是指基于散列的消息认证码(Hash-based Message Authentication Code)。HMAC是Internet协议(IP)安全的强制安全实施方法,并在Internet上广泛使用的安全套接层(SSL)协议中使用。 HMAC的基本思想是复用MD5与SHA-1之类现有的消息摘要算法。因此,HMAC利用消息摘要算法,把消息摘要看成一个黑盒子,用共享秘密密钥加密消息摘要,从而输出MAC,如下图所示: 2.HMAC工作原理 HMAC的完整操作如下图所示: 下面看看HMAC的内

zhinen丶的博客 1万+

Flutter连接蓝牙打印机打印(含中文、双排打印)

Flutter连接蓝牙打印机打印(含中文、双排打印)

Session_W的博客 701

基于MCP协议的AssistAI:深度集成Eclipse的AI编程助手实战指南

在AI辅助编程领域,大型语言模型(LLM)与开发工具的深度集成是提升开发效率的关键。其核心原理在于通过标准化的协议(如MCP,Model Context Protocol),将IDE的功能封装为AI可调用的工具集,从而实现环境感知与操作同步。这项技术的价值在于打破了传统AI编程工具与开发者工作流的割裂,使AI能够以符合工程规范的方式直接操作项目,如进行代码重构、运行测试和交互式调试。其典型应用场景包括复杂代码导航、自动化测试生成与精准的增量编译。本文以Eclipse插件AssistAI为例,详细解析了如何通

weixin_42531579的博客 558

揭秘Python中Cryptodome与cryptography的终极对决:谁才是加密王者?

掌握Python加密解密工具的选择难题?本文深入对比Cryptodome与cryptography库的性能、易用性与安全性,解析AES、RSA等算法实现,适用于数据保护与通信安全场景,帮你选出最佳方案。值得收藏

FastSolve的博客 885

三甲医院网络架构与安全建设实战

华为OceanStor] [华为OceanStor][PACS存储双活] [HIS数据库同步]患者隐私 数据脱敏 天清Web防火墙动态脱敏策略。主数据中心 --[OTV专线]-- 备数据中心。实现医疗业务网/卫生专网/互联网三网隔离。核心业务配置(华为CE6865)自动备份配置(每天02:00)安全事件响应(30分钟SLA)漏洞扫描(每周日00:00)实现医疗物联网统一接入管控。五、等保2.0合规关键配置。堡垒机登录(双因素认证)四、医疗物联网安全方案。

有小小的远大抱负 1911

深入解析消息认证码(MAC)算法:HmacMD5与HmacSHA1

消息认证码(MAC)算法是确保消息完整性和身份验证的重要技术。HmacMD5和HmacSHA1作为两种常见的MAC算法,分别基于MD5和SHA-1哈希函数进行构建。虽然HmacMD5和HmacSHA1在一定程度上提高了消息传输的安全性,但由于MD5和SHA-1自身存在的潜在安全隐患,使得这两种算法在实际应用中可能面临一定的风险。因此,在选择消息认证码算法时,应优先考虑使用基于更安全哈希函数的Hmac算法,以确保数据的安全传输。

码到三十五 1万+

2025华为od机试真题B卷【版本管理】JavaScript实现

在 软件版本管理中,版本号由点分割的数字组成,例如 1.2.3 和 2.8。现在,你需要编写一个函数,计算两个版本号之间的可用版本号个数。这里的可用版本号指的是所有满足 version1<x<version2的版本号x的个数。若 version1 >=version2 返回0.,

MISAYAONE的博客 254

高通IPA硬件加速介绍

‌ 高通IPA (Internet Protocol Accelerator)模块是一种硬件加速模块,由高通公司(Qualcomm)提供,主要用于优化移动设备上的网络数据传输,特别是通过 LTE 、 5G 等移动网络的数据传输‌‌。IPA模块通过硬件加速,显著提高了数据传输的速度和效率,同时降低了设备的功耗,并提供了更稳定的网络连接,减少了数据传输中的丢包和延迟‌。

四儿家的小祖宗的博客 1624

加密与安全_深入了解Hmac算法(消息认证码)

HMAC(Hash-based Message Authentication Code)算法是一种基于哈希函数的消息认证码算法,用于验证消息的完整性和认证消息的发送者。它结合了哈希函数和密钥,通过将密钥与消息进行哈希运算来生成消息认证码。首先,选择一个适当的哈希函数(如MD5、SHA-1、SHA-256等)和一个密钥。将密钥进行适当的填充和处理,以满足哈希函数的输入长度要求。将消息与填充后的密钥按照特定的方式进行组合。对组合后的数据进行哈希运算。将哈希结果作为消息认证码输出。

小工匠 8883

【软考】高项论文写作常见模板

本文主要介绍了YYYY年MM月DD日,我所在公司承接了XXXX项目的建设过程,包括了XXX,XXX,XXX内容,涉及到XXX,XXX,XXX技术。本人在项目中承载着项目经理的角色,主要负责了XXX,XXX,XXX方面事宜。此项目时间紧,任务重,实施过程中,我们特别注重了1、XXX 2、XXX 3、XXX几个方面,经过团队的一致努力,本项目按时交付,运行至今,客户反馈良好。但是在实施过程中,也曝露除了一些问题,包括了XXX,XXX等,通过应急处理和协调,这些问题都得到了妥善解决,没有影响到项目进度。

奶爸的编程之路,也就一周冷个三天 1687

密码学基础-Hash、MAC、HMAC 的区别与联系

本文主要介绍 Hash、MAC、HMAC 的联系与区别,层层递进地描述了如何增加数据的安全性。本文还介绍了长度扩展攻击的基本实现原理,HMAC 算法通过执行两轮 Hash 运算对抗这种攻击。hash只能验证数据完整性,无法保证数据防篡改,计算过程无密钥参与。MAC既可以验证数据完整性,也可以验证数据是由原始发送方发出的,计算过程有密钥参与,使用对称加密算法构造。

物联网老王的博客,公众号同名 1万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

hmac — 加密消息签名和验证

前一个例子使用了 hexdigest() 方法生成可打印的摘要字符串。这个摘要字符串是由 digest() 方法生成的值的不同表现形式而已,这个值可能包括包括不可打印字符,包括 NUL。一些 web 服务(Google checkout, Amazon S3)使用了二进制摘要的 base64 版本而不是 hexdigest。base64 编码的字符串以换行符结尾,当将字符串嵌入到 HTTP 头或者其他敏感的上下文中时,经常需要将这个换行符删除。

Bruce小鬼 2778

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

HMAC 介绍

HMAC(Hash-based Message Authentication Code) 是一种基于哈希函数的消息认证码技术,用于同时验证数据完整性(Integrity)和身份真实性(Authentication)。其核心原理是通过密钥(Secret Key)与原始数据混合运算生成防篡改的签名,确保消息在传输中未被修改且来源可信。

Doublelv 的博客专栏。 1849

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Hmac概念与实现(js和go实现)

目录 一.什么是Hmac 二.HMAC各方法的优劣 Hmacsha1 Hmacsha256和Hmacsha512 三.HMAC签名的实现 js实现HMAC签名 go实现HMAC签名 备注 参考 一.什么是Hmac 维基百科对Hmac的释义是: Incryptography, anHMAC(sometimes expanded as eitherkeyed-hash message authentication codeorhash-based message au...

qq_37027534的博客 6785

HMAC简介

密码学 消息认证码 HMAC 基于散列函数的消息认证码

Enrobot的博客 2296

消息验证码 MAC (HMAC、CMAC) 原理、特点

介绍了MAC的实现原理及典型实现方案,主要内容参考自《密码编码学与网络安全》

weixin_50167003的博客 1万+

python使用HMAC算法

Hmac算法:Keyed-Hashing for Message Authentication。它通过一个标准算法,在计算哈希的过程中,把key混入计算过程中。 和我们自定义的加salt算法不同,Hmac算法针对所有哈希算法都通用,无论是MD5还是SHA-1。采用Hmac替代我们自己的salt算法,可以使程序算法更标准化,也更安全。 Python自带的hmac模块实现了标准的Hmac算法。我们来看看如何使用hmac实现带key的哈希。 我们首先需要准备待计算的原始消息message,固定key,哈希算法,这

菜鸡小白的成长记录 5759

数字签名----消息验证码 HMAC

一、概念 HMAC 全称(Hash-based Message Authentication Code,即基于Hash的消息的认证码)。 - 基本过程为对某个消息,利用提前共享的对称密钥和Hash算法进行加密处理,得到HMAC值。 - 该HMAC值提供方可以证明自己拥有共享密钥的对称密钥,并且消息自身可以利用HMAC确保未经篡改。 二、为什么不直接使用哈希值来进行校验 每个数据哈希值唯一,数据被伪造篡改后,哈希值改变。 例如: xxxxx?name=hahah&hash=547779D1FBA9B6

互联网叫兽 2481

加密算法(四)-消息认证码算法(HMAC、CMAC)一篇了解所有主流消息认证码算法,轻松上手使用。

1.依赖哈希函数的安全性:HMAC 的安全性依赖于所使用的哈希函数的安全性。3.与加密算法集成性好:由于 CMAC 基于对称加密算法,它可以很方便地与对称加密算法集成,在加密数据的同时进行消息认证,提高系统的安全性和效率。2.算法复杂度相对较高:与一些简单的哈希算法相比,CMAC 基于对称加密算法,其算法复杂度相对较高,实现起来可能需要更多的代码和资源。2.高效性:CMAC 的计算效率较高,尤其是在处理大数据块时,比一些基于哈希函数的消息认证码算法(如 HMAC)具有更好的性能表现。

个人开发经验记事本在此!穿梭于代码世界,积累下满满实战心得。于我而言,开发不仅是技术的打磨,更是经验的沉淀。 1519

HASH、MAC、HMAC学习

Hash 是一种从任何一种数据中创建小的数字“指纹”的方法。 散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。 如果两个散列值是不相同的(根据同一函数),那么这两个散列值的原始输入也是不相同的。 这个特性是散列函数具有确定性的结果,具有这种性质的散列函数称为单向散列函数。 但另一方面,散列函数的输入和输出不是唯一对应關係的,如果两个散列值相同,两个输入值很可能是相同的。 但也可能不同,這種情況稱為「碰撞」,這通常是兩個不同長度的散列值,刻意計算出相同的輸出值。 Hash,一般翻译做“散

斑驳的岁月 4937

消息摘要算法-HMAC算法

一、 什么是HMAC HMAC是一种使用单向散列函数来构造消息认证码的方法,其中HMAC中的H就是Hash的意思,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。或者简单点说,HMAC就是信息在hash的时候,按照一定规则在信息里添加了一些关键字,增加了hash破解的难度。 HMAC中所使用的单向散列函数并不仅限于一种,任何高强度的单向散列函数都可以被用于HMAC,如果将来设计出的新的单...

The future is already here it's just not evenly distributed。 1372
上一篇: 【嵌入式安全专家忠告】:C语言裸机程序必须规避的8类高危编程行为
下一篇: Transformer推理显存优化全解析,掌握这7种技术轻松部署百亿模型
SimTrans
博客等级 码龄1年 158粉丝 2004原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值