Home
Services
Shop
Pages
About Us
Services Details
Shop Details
Blog Details
Contact
Blog
(+86) 13108958693
Mon-Fri: 17:00 - 22:00 Sat/Sun: 09:00 - 22:00
(+86) 13108958693
Mon-Fri: 17:00 - 22:00 Sat/Sun: 09:00 - 22:00
扫一扫加站长微信
您的鼓励是我最大的动力
微信打赏
2元
4元
10元
微信
支付宝
首页
标准&法规
ISO-21434
R155
R156
密码工具
对称密码
非对称密码
摘要函数
消息认证码
数字签名
数字证书
随机数
密钥
软件安全
AUTOSAR
QNX
Linux
硬件安全
SecureZone
HSM
TEE
攻击手段
Dos 攻击
中间人攻击
...
...
防御措施
最小权限原则
安全启动
安全升级
安全通信
安全诊断
安全日志
防火墙
安全测试
模糊测试
渗透测试
漏洞扫描
关于
扫一扫加站长微信
您的鼓励是我最大的动力
2元
4元
10元
微信
支付宝
HMAC
主页
密码工具
对称密码
对称密码介绍
DES
Triple DES
AES
Rabbit
RC4
异或
非对称密码
非对称密码介绍
RSA
SM2
ECC
摘要函数算法
摘要函数介绍
MD4
MD5
SHA
SM3
CRC
消息认证码
消息认证码介绍
CMAC
> HMAC <
数字签名
数字签名介绍
RSA-Signature
ECDSA
数字证书
数字证书介绍
X.509
X.509 证书解析
X.509 证书生成
X.509 证书验证
SSL
SSL 证书解析
...
...
...
CSR 生成
随机数
随机数介绍
PRNG
TRNG
密钥
密钥介绍
Diffie-Hellman 密钥交换
口令
哈希算法选择:
SHA-256
SHA-512
SHA-1
MD5
密钥:
Hex
Text
消息格式:
十六进制
Base64
HMAC结果格式:
十六进制
Base64
计算HMAC
HMAC
HMAC 是一种使用单向散列函数来构造消息认证码的方法(RFC2104),其中 HMAC 的 H 就是 Hash 的意思。
HMAC 中所使用的单向散列函数并不仅限于一种,任何高强度的单向散列函数都可以被用于 HMAC,如果将来设计出新的单向散列函数,也同样可以使用。
使用 SHA-1、SHA-224、SHA-256、SHA-384、SHA-512 所构造的 HMAC,分别称为 HMAC-SHA1、HMAC-SHA-224、HMAC-SHA-256、HMAC-SHA-384、HMAC-SHA-512。
HMAC 的步骤
HMAC 中是按照下列步骤来计算 MAC 值的。
(1) 密钥填充
如果密钥比单向散列函数的分组长度要短,就需要在末尾填充 0,直到其长度达到单向散列函数的分组长度为止。
如果密钥比分组长度要长,则要用单向散列函数求出密钥的散列值,然后将这个散列值用作 HMAC 的密钥。
(2) 填充后的密钥与 ipad 的 XOR
接下来,我们使用伪随机数生成器生成会话密钥。会话密钥是用来加密消息的密钥(CEK)。
将填充后的密钥与被称为 ipad 的比特序列进行 XOR 运算。ipad(inner padding)是将 00110110 这一比特序列(即 16 进制的 36)不断循环反复直到达到分组长度所形成的比特序列。
(3)与消息组合
随后,将 ipadkey 与消息进行组合,也就是将和密钥相关的比特序列(ipadkey)附加在消息的开头。
(4)计算散列值
将(3)的结果输入单向散列函数,并计算出散列值。
(5)填充后的密钥与 opad 的 XOR
将填充后的密钥与被称为 opad 的比特序列进行 XOR 运算。opad(outer padding) 是将 01011100 这一比特序列(即 16 进制的 5C)不断循环反复直到达到分组长度所形成的比特序列。
X0R 运算所得到的结果也是一个和单向散列函数的分组长度相同,且和密钥相关的比特序列。这里我们将这个比特序列称为 opadkey。
(6)与散列值组合
将(4)的散列值拼在 opadkey 后面。
(7)计算散列值
将(6)的结果输又单向散列函数,并计算出散列值。这个散列值就是最终的 MAC 值。
通过上述流程我们可以看出,最后得到的 MAC 值,一定是一个和输人的消息以及密钥都相关的长度固定的比特序列。
哈希算法选择
SHA-256:
广泛使用的安全哈希算法,输出长度为256位(32字节),在安全性和性能之间取得良好平衡,适用于大多数现代应用。
SHA-512:
输出长度为512位(64字节),适用于需要高安全性的场景,计算速度相对较慢。
SHA-1:
已被认为不够安全,不推荐用于新系统,输出长度为160位(20字节),仅用于兼容旧系统。
MD5:
最不安全的选项,容易受到碰撞攻击,输出长度为128位(16字节),计算速度快,但不应用于安全相关用途,仅用于非加密目的,如校验和。
密钥(偏移)
Text:
表示是文本格式,加密前会使用 UTF-8 编码,把它转成 byte[] 数组
Hex
表示是十六进制格式,加密前会把十六进制字符串转成 byte[] 数组
+