算法道路千千万,各有千秋,莫要较真
现在很多都原生态支持SHA256,不如乐鑫的调用即用
然而对于别的偏向底层的开发,如需要自己实现算法,也不是不行!
公式为:
HMAC_SHA256 (k,m)=SHA256(k`⊕opad∥SHA256(k`⊕ipad∥m))
其中:
SHA256 为SHA-256加密算法,其输出散列值长度256-bit;
∥ 拼接操作,将两个字符串拼接在一起;
B Hash函数明文分组长度,SHA-256算法中为512-bit;
k`为密钥(secret key);
m 为要认证的消息;
k` 是从原始密钥 k 导出的另一个密钥(若 k 短于B,则向右填充零,直到与B相同;若k长于B,则对 k 进行一次SHA256散列计算)
opad 内部填充(0x5C5C5C…5C5C,512-bit常量);
ipad 外部填充(0x363636…3636,512-bit常量)
以下是详细展开
假设 ProductSecret产品密钥:DMLMXLEBWOW6Voks 16个字节
k="DMLMXLEBWOW6Voks"
k'=0x444d4c4d584c4542574f5736566f6b73000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 64字节 512bit
opad=0x5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C 64字节 512bit
ipad=0x36363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636 64字节 512bit
k’⊕ipad = 0x727b7a7b6e7a73746179610060595d45363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636
k’⊕opad = 0x181110110410191e0b130b6a0a33372f5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c
m="123456" = 0x313233343536
k’⊕ipad∥m =
0x727b7a7b6e7a73746179610060595d45363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636313233343536
SHA256(k’⊕ipad∥m)=0x3abace516abbbe349f053a7e8a2f14049762646f70ddb1bc2c6536a7544f7ae6
k’⊕opad∥SHA256(k’⊕ipad∥m)=
0x181110110410191e0b130b6a0a33372f5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c3abace516abbbe349f053a7e8a2f14049762646f70ddb1bc2c6536a7544f7ae6
代入公式手动计算得
SHA256(k’⊕opad∥SHA256(k’⊕ipad∥m))=
4161df4e1022c4e2c4306982877c898bf9f807c886e0e9b59171d26d54407271
4161df4e1022c4e2c4306982877c898bf9f807c886e0e9b59171d26d54407271
--》在线生成工具HMAC计算、HMAC-MD5、HMAC-SHA1、HMAC-SHA256、HMAC-SHA512在线计算 - 1024Tools