Hmac的算法表达式是
发布日期:2025-04-12
HMAC(Hash - based Message Authentication Code)即基于哈希的消息认证码,它的算法表达式定义如下:
假设 是一个密码学哈希函数(如SHA - 1、SHA - 256等), 是共享密钥, 是要认证的消息。
首先确定块大小 和输出大小
哈希函数 有一个内部块大小 (以字节为单位)。例如,对于SHA - 256, 字节。
哈希函数 的输出大小为 字节。例如,SHA - 256的输出大小 字节。
处理密钥
如果密钥 的长度大于块大小 ,则将 作为哈希函数的输入进行计算,即 ,得到新的密钥 ,使其长度符合要求。
如果密钥 的长度小于块大小 ,则在 的左边填充0字节,直到长度达到 字节,记为 。
计算内部和外部填充值
定义内部填充值 ,它是一个 字节的常量,每个字节的值为 。
定义外部填充值 ,它是一个 字节的常量,每个字节的值为 。
计算中间结果
计算 ,这里 表示按位异或操作。
将消息 附加到 之后,即 (这里 表示字符串连接操作)。
计算 ,得到中间哈希值 。
计算最终的HMAC值
计算 。
将中间哈希值 附加到 之后,即 。
最终的HMAC值为 。
用伪代码表示如下:
function HMAC(K, M) { B = block size of H L = output size of H if (length(K) > B) { K = H(K) } K_p = left - pad K with 0s until length(K_p) == B ipad = byte string of B bytes with value 0x36 opad = byte string of B bytes with value 0x5C Si = K_p XOR ipad SiM = Si concatenate M h_1 = H(SiM) So = K_p XOR opad SoH = So concatenate h_1 return H(SoH) }
不同的编程语言都有相应的库来实现HMAC,例如在Python中可以使用 hmac
模块,在Java中可以使用 javax.crypto.Mac
类来方便地计算HMAC值。