网易首页 > 网易号 > 正文 申请入驻

Python 库手册:hmac 消息摘要认证模块

0
分享至

hmac(Hash-based Message Authentication Code)模块用于生成消息认证码(MAC),以确保数据完整性和身份验证安全性。它结合了哈希算法(如 MD5、SHA256)和密钥,防止数据在传输过程中被篡改,是构建安全通信协议的重要工具。

常见应用场景:

(1)网络请求签名验证(如 API 请求)。

(2)用户数据校验(如 cookie 签名)。

(3)消息认证与防篡改机制。

(4)实现 HMAC-based 身份认证协议(如 OAuth、JWT)。

◆ ◆

核心概念

1、HMAC 原理

将消息(message)与密钥(key)混合,再使用哈希算法生成摘要。即使内容一致,不同密钥也会产生不同结果。

2、不可逆 + 加盐

在哈希的基础上引入密钥(即“盐”),增强安全性并防止“哈希碰撞攻击”。

3、支持多种哈希算法

如 md5, sha1, sha256, sha512 等,底层基于 hashlib。

4、安全比较函数

hmac.compare_digest() 用于避免时序攻击,推荐用于密钥/摘要比对。

◆ ◆

应用举例

例 1:生成 HMAC 签名(默认使用 sha256)

import hmac
import hashlib

key = b'secret_key'
message = b'hello world'

signature = hmac.new(key, message, hashlib.sha256).hexdigest()
print("HMAC 签名(sha256):", signature)

例 2:验证两个 HMAC 是否一致(安全比较)

import hmac
import hashlib

key = b'secret_key'
msg = b'hello world'

sig1 = hmac.new(key, msg, hashlib.sha256).digest()
sig2 = hmac.new(key, msg, hashlib.sha256).digest()

print("签名一致:" , hmac.compare_digest(sig1, sig2))

例 3:使用 sha1 生成较短签名

import hashlib

key = b'key123'
msg = b'important message'

signature = hmac.new(key, msg, hashlib.sha1).hexdigest()
print("HMAC 签名(sha1):", signature)

例 4:HMAC 用于 Webhook 签名验证

import hmac
import hmac
import hashlib

def is_valid_signature(secret, message, signature):
    mac = hmac.new(secret.encode(), message.encode(), hashlib.sha256)
    return hmac.compare_digest(mac.hexdigest(), signature)

# 示例参数
msg = 'event=data'
secret = 'webhook_key'
sig = hmac.new(secret.encode(), msg.encode(), hashlib.sha256).hexdigest()

print("签名验证结果:", is_valid_signature(secret, msg, sig))

例 5:将 HMAC 签名用于 token 加密存储

import hmac
import hashlib
import base64

key = b'session_secret'
token = b'user_id=1001&exp=2025-12-31'

signature = hmac.new(key, token, hashlib.sha256).digest()
token_with_sig = token + b"." + base64.urlsafe_b64encode(signature)

print("带签名的 token:", token_with_sig.decode())

◆ ◆

常用函数速览

hmac.new(key, msg=None, digestmod=None)

创建一个新的 HMAC 对象。

参数

key:密钥(bytes 类型)

msg:要加密的消息(可选,bytes 类型)

digestmod:哈希算法函数,如 hashlib.sha256

返回:HMAC 对象(支持 .update()、.digest()、.hexdigest())

HMAC.update(msg)

向当前 HMAC 对象中追加消息。

参数

msg:追加的消息内容(bytes 类型)

返回:无

HMAC.digest()

返回二进制格式的 HMAC 摘要。

参数:无

返回:bytes 类型

HMAC.hexdigest()

返回十六进制字符串形式的 HMAC 摘要。

参数:无

返回:str 类型

hmac.compare_digest(a, b)

安全比较两个摘要,防止时序攻击。

参数

a, b:两个 bytes 或 str 对象

返回:bool 类型,内容相同为 True,否则 False

◆ ◆

补充说明

1、HMAC 摘要是不可逆的,仅用于验证而非还原原始消息。

2、HMAC 的安全性依赖于密钥的保密性与哈希算法的抗碰撞能力。

3、与对称加密不同,HMAC 不会加密内容,只生成认证签名。

点赞有美意,赞赏是鼓励

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
43岁安妮·海瑟薇怀三胎!走红毯穿反裙子引热议:套麻袋都美!

43岁安妮·海瑟薇怀三胎!走红毯穿反裙子引热议:套麻袋都美!

英国报姐
2026-07-08 00:19:56
女孩模仿哈兰德走红,复刻神态步伐,“哈宝”点赞评论:我同意,网友:太还原

女孩模仿哈兰德走红,复刻神态步伐,“哈宝”点赞评论:我同意,网友:太还原

东方不败然多多
2026-07-07 16:06:08
钱再多有什么用?47岁在家晕倒进急诊的刘璇,给所有人敲响了警钟

钱再多有什么用?47岁在家晕倒进急诊的刘璇,给所有人敲响了警钟

白面书誏
2026-07-07 18:25:31
央视发文,高调官宣邓亚萍新身份,涉嫌贪腐被带走传闻早水落石出

央视发文,高调官宣邓亚萍新身份,涉嫌贪腐被带走传闻早水落石出

铭记历史呀
2026-06-18 22:46:07
任重孙骁骁首次公开出镜,42岁孙骁骁看着像20岁的大学生!

任重孙骁骁首次公开出镜,42岁孙骁骁看着像20岁的大学生!

娱乐顺风车666
2026-07-07 12:02:51
超女冠军江映蓉:过度医美后像“怪物”,全身只剩下眼珠是自己的

超女冠军江映蓉:过度医美后像“怪物”,全身只剩下眼珠是自己的

情感大头说说
2026-07-08 14:20:51
零的突破!国产首台PLP 2000光刻机拿下先进封装大单

零的突破!国产首台PLP 2000光刻机拿下先进封装大单

快科技
2026-07-06 18:53:21
为什么红军到了陕北,就安全了?原因很现实,6个原因

为什么红军到了陕北,就安全了?原因很现实,6个原因

老呶侃史
2026-06-11 21:36:40
心理学:人过了七十岁,如果不想天天久病卧床、任何事都仰人鼻息,就请你牢记这两个心理口诀,远远比吃滋补品强太多

心理学:人过了七十岁,如果不想天天久病卧床、任何事都仰人鼻息,就请你牢记这两个心理口诀,远远比吃滋补品强太多

心理观察局
2026-07-01 07:37:12
四川宜宾连发9次地震,五粮液回应

四川宜宾连发9次地震,五粮液回应

澎湃新闻
2026-07-08 14:06:28
隐瞒了28年,杨钰莹才坦白:当年若和毛宁在一起,如今都当妈了

隐瞒了28年,杨钰莹才坦白:当年若和毛宁在一起,如今都当妈了

眼底星碎
2026-07-06 04:04:28
一副大墨镜骗过了特斯拉!司机开启FSD后睡着 车辆以时速100km狂奔

一副大墨镜骗过了特斯拉!司机开启FSD后睡着 车辆以时速100km狂奔

中国能源网
2026-07-07 15:21:03
翻车!以色列官方庆祝阿根廷获胜 阿网友怒斥:肮脏的种族灭绝者

翻车!以色列官方庆祝阿根廷获胜 阿网友怒斥:肮脏的种族灭绝者

念洲
2026-07-08 16:54:14
克洛泽:梅西世界杯期间和我通了电话,还要送我一件签名球衣

克洛泽:梅西世界杯期间和我通了电话,还要送我一件签名球衣

懂球帝
2026-07-08 12:55:16
17岁羽毛球小将因热射病意外去世,集训球馆闷热不通风酿悲剧

17岁羽毛球小将因热射病意外去世,集训球馆闷热不通风酿悲剧

米修体育
2026-07-07 23:40:29
非必要不做CT?医生强调:只要做过CT,患者一定多加关注这4点!

非必要不做CT?医生强调:只要做过CT,患者一定多加关注这4点!

叙说医疗健康
2026-06-16 08:00:21
震惊!75元南宁校服与69000元LV夹克“撞衫”,网友:能起诉吗

震惊!75元南宁校服与69000元LV夹克“撞衫”,网友:能起诉吗

火山詩话
2026-07-07 11:40:39
以巴冲突中一个极丑陋、极双标的流氓逻辑

以巴冲突中一个极丑陋、极双标的流氓逻辑

壹家言
2026-07-07 10:06:01
曝韩红退出公益行业仅1天,再迎来2大“噩耗”,荒唐的一幕发生

曝韩红退出公益行业仅1天,再迎来2大“噩耗”,荒唐的一幕发生

皮皮电影
2026-07-06 10:47:56
矢板明夫在台中被一名香港人袭击,国台办回应:这名男子出于义愤做出相关举动,正告民进党当局,不得损害其正当权益

矢板明夫在台中被一名香港人袭击,国台办回应:这名男子出于义愤做出相关举动,正告民进党当局,不得损害其正当权益

政知新媒体
2026-07-08 13:32:54
2026-07-08 22:27:00
MediaTea
MediaTea
专业的数字媒体、新媒体技术
1941文章数 84关注度
往期回顾 全部

科技要闻

独家对话小红书IPO举报风波当事人

头条要闻

北约秘书长"告白"特朗普:就喜欢他 他对伊开战是对的

头条要闻

北约秘书长"告白"特朗普:就喜欢他 他对伊开战是对的

体育要闻

阿根廷被埃及埋了一半,死里逃生

娱乐要闻

鹿晗出轨?邓超出轨绯闻又被扒出

财经要闻

新能源车"外挂电池"乱象:暗藏致命风险

汽车要闻

定名岚图梦想家9!岚图全新旗舰MPV来袭

态度原创

本地
手机
健康
时尚
公开课

本地新闻

万斤西瓜免费吃,来河南顶“瓜瓜”

手机要闻

还得是小米!灾难不止捐钱,还为广西洪灾受损设备免费检测、维修

干细胞是人体的专属修理工吗?

工装裙、工装短袖越来越火,全世界时髦的女人都在穿

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版