HMAC-MD5算法原理及实现
密鑰的長(zhǎng)度可以是小于等于數(shù)據(jù)塊長(zhǎng)的任何正整數(shù)值。應(yīng)用程序中使用的密鑰長(zhǎng)度若是比B大,則首先用使用散列?
函數(shù)H作用于它,然后用H輸出的L長(zhǎng)度字符串作為在HMAC中實(shí)際使用的密鑰。
一般情況下,推薦的最小密鑰K長(zhǎng)度是L長(zhǎng)。(與H的輸出數(shù)據(jù)長(zhǎng)度相等)。?
我們將定義兩個(gè)固定且不同的字符串ipad,opad:
opad = the byte 0x5C repeated B times. 計(jì)算‘text'的HMAC: H( K XOR opad, H(K XOR ipad, text)) 即為以下步驟:
void hmac_md5(char* out, char* data, int dlen, char* key, int klen)
{
(1)?在密鑰key后面添加0來創(chuàng)建一個(gè)長(zhǎng)為B(64字節(jié))的字符串(str)。
(2)?將上一步生成的字符串(str)與ipad(0x36)做異或運(yùn)算,形成結(jié)果字符串(istr)。?
(3)?將數(shù)據(jù)流data附加到第二步的結(jié)果字符串(istr)的末尾。?
(4) 做md5運(yùn)算于第三步生成的數(shù)據(jù)流(istr)。?
(5)?將第一步生成的字符串(str)與opad(0x5c)做異或運(yùn)算,形成結(jié)果字符串(ostr)。
(6)?再將第四步的結(jié)果(istr)附加到第五步的結(jié)果字符串(ostr)的末尾。?
(7)?做md5運(yùn)算于第六步生成的數(shù)據(jù)流(ostr),輸出最終結(jié)果(out)。
}
注:如果第一步中,key的長(zhǎng)度klen大于64字節(jié),則先進(jìn)行md5運(yùn)算,使其長(zhǎng)度klen=16字節(jié)。
總結(jié)
以上是生活随笔為你收集整理的HMAC-MD5算法原理及实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 金剑南箱子上一个浓香型白酒一个是白酒咋回
- 下一篇: C# MD5加密解密帮助类