当前位置:育儿知识大全 早教内容页

Hmac的算法表达式是

HMAC(Hash - based Message Authentication Code)即基于哈希的消息认证码,它的算法表达式定义如下:

假设 H H 是一个密码学哈希函数(如SHA - 1、SHA - 256等), K K 是共享密钥, M M 是要认证的消息。

 

首先确定块大小 B B 和输出大小 L L

哈希函数 H H 有一个内部块大小 B B (以字节为单位)。例如,对于SHA - 256, B=64 B = 64 字节。

哈希函数 H H 的输出大小为 L L 字节。例如,SHA - 256的输出大小 L=32 L = 32 字节。

 

 

处理密钥 K K

如果密钥 K K 的长度大于块大小 B B ,则将 K K 作为哈希函数的输入进行计算,即 K=H(K) K' = H(K) ,得到新的密钥 K K' ,使其长度符合要求。

如果密钥 K K 的长度小于块大小 B B ,则在 K K 的左边填充0字节,直到长度达到 B B 字节,记为 Kp K_p

 

 

计算内部和外部填充值

定义内部填充值 ipad ipad ,它是一个 B B 字节的常量,每个字节的值为 0x36 0x36

定义外部填充值 opad opad ,它是一个 B B 字节的常量,每个字节的值为 0x5C 0x5C

 

 

计算中间结果

计算 Si=Kpipad Si = K_p \oplus ipad ,这里 \oplus 表示按位异或操作。

将消息 M M 附加到 Si Si 之后,即 SiM=SiM SiM = Si || M (这里 || 表示字符串连接操作)。

计算 H(SiM) H(SiM) ,得到中间哈希值 h1 h_1

 

 

计算最终的HMAC值

计算 So=Kpopad So = K_p \oplus opad

将中间哈希值 h1 h_1 附加到 So So 之后,即 SoH=Soh1 SoH = So || h_1

最终的HMAC值为 HMAC(K,M)=H(SoH) HMAC(K, M)=H(SoH)

 

用伪代码表示如下:

复制代码

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值。