日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HMAC算法及其应用

發(fā)布時間:2024/2/28 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HMAC算法及其应用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

HMAC算法及其應(yīng)用

  • MAC
  • HMAC
  • HMAC的應(yīng)用
  • HMAC實現(xiàn)舉例

MAC

在現(xiàn)代的網(wǎng)絡(luò)中,身份認證是一個經(jīng)常會用到的功能,在身份認證過程中,有很多種方式可以保證用戶信息的安全,而MAC(message authentication code)就是一種常用的方法。

消息認證碼是對消息進行認證并確認其完整性的技術(shù)。通過使用發(fā)送者和接收者之間共享的密鑰,就可以識別出是否存在偽裝和篡改行為。

MAC是通過MAC算法+密鑰+要加密的信息一起計算得出的。

同hash算法(消息摘要)相比,消息摘要只能保證消息的完整性,即該消息摘要B是這個消息A生成的。而MAC算法能夠保證消息的正確性,即判斷確實發(fā)的是消息A而不是消息C。

同公私鑰體系相比,因為MAC的密鑰在發(fā)送方和接收方是一樣的,所以發(fā)送方和接收方都可以來生成MAC,而公私鑰體系因為將公鑰和私鑰分開,所以增加了不可抵賴性。

MAC有很多實現(xiàn)方式,比較通用的是基于hash算法的MAC,比如今天我們要講的HMAC。還有一種是基于分組密碼的實現(xiàn),比如(OMAC, CBC-MAC and PMAC)。

HMAC

HMAC 是Keyed-Hashing for Message Authentication的縮寫。HMAC的MAC算法是hash算法,它可以是MD5, SHA-1或者 SHA-256,他們分別被稱為HMAC-MD5,HMAC-SHA1, HMAC-SHA256。

HMAC用公式表示:

H(K XOR opad, H(K XOR ipad, text))

其中
H:hash算法,比如(MD5,SHA-1,SHA-256)
B:塊字節(jié)的長度,塊是hash操作的基本單位。這里B=64。
L:hash算法計算出來的字節(jié)長度。(L=16 for MD5, L=20 for SHA-1)。
K:共享密鑰,K的長度可以是任意的,但是為了安全考慮,還是推薦K的長度>B。當K長度大于B時候,會先在K上面執(zhí)行hash算法,將得到的L長度結(jié)果作為新的共享密鑰。 如果K的長度<B, 那么會在K后面填充0x00一直到等于長度B。
text: 要加密的內(nèi)容
opad:外部填充常量,是 0x5C 重復(fù)B次。
ipad: 內(nèi)部填充常量,是0x36 重復(fù)B次。
XOR: 異或運算。

計算步驟如下:

  • 將0x00填充到K的后面,直到其長度等于B。
  • 將步驟1的結(jié)果跟 ipad做異或。
  • 將要加密的信息附在步驟2的結(jié)果后面。
  • 調(diào)用H方法。
  • 將步驟1的結(jié)果跟opad做異或。
  • 將步驟4的結(jié)果附在步驟5的結(jié)果后面。
  • 調(diào)用H方法。
  • HMAC的應(yīng)用

    hmac主要應(yīng)用在身份驗證中,如下是它的使用過程:

  • 客戶端發(fā)出登錄請求(假設(shè)是瀏覽器的GET請求)
  • 服務(wù)器返回一個隨機值,并在會話中記錄這個隨機值
  • 客戶端將該隨機值作為密鑰,用戶密碼進行hmac運算,然后提交給服務(wù)器
  • 服務(wù)器讀取用戶數(shù)據(jù)庫中的用戶密碼和步驟2中發(fā)送的隨機值做與客戶端一樣的hmac運算,然后與用戶發(fā)送的結(jié)果比較,如果結(jié)果一致則驗證用戶合法。
  • 在這個過程中,可能遭到安全攻擊的是服務(wù)器發(fā)送的隨機值和用戶發(fā)送的hmac結(jié)果,而對于截獲了這兩個值的黑客而言這兩個值是沒有意義的,絕無獲取用戶密碼的可能性,隨機值的引入使hmac只在當前會話中有效,大大增強了安全性和實用性。

    HMAC實現(xiàn)舉例

    /* ** Function: hmac_md5 */void hmac_md5(text, text_len, key, key_len, digest) unsigned char* text; /* pointer to data stream */ int text_len; /* length of data stream */ unsigned char* key; /* pointer to authentication key */ int key_len; /* length of authentication key */ caddr_t digest; /* caller digest to be filled in */{MD5_CTX context;unsigned char k_ipad[65]; /* inner padding -* key XORd with ipad*/unsigned char k_opad[65]; /* outer padding -* key XORd with opad*/unsigned char tk[16];int i;/* if key is longer than 64 bytes reset it to key=MD5(key) */if (key_len > 64) {MD5_CTX tctx;MD5Init(&tctx);MD5Update(&tctx, key, key_len);MD5Final(tk, &tctx);key = tk;key_len = 16;}/** the HMAC_MD5 transform looks like:** MD5(K XOR opad, MD5(K XOR ipad, text))** where K is an n byte key* ipad is the byte 0x36 repeated 64 times* opad is the byte 0x5c repeated 64 times* and text is the data being protected*//* start out by storing key in pads */bzero( k_ipad, sizeof k_ipad);bzero( k_opad, sizeof k_opad);bcopy( key, k_ipad, key_len);bcopy( key, k_opad, key_len);/* XOR key with ipad and opad values */for (i=0; i<64; i++) {k_ipad[i] ^= 0x36;k_opad[i] ^= 0x5c;}/** perform inner MD5*/MD5Init(&context); /* init context for 1st* pass */MD5Update(&context, k_ipad, 64) /* start with inner pad */MD5Update(&context, text, text_len); /* then text of datagram */MD5Final(digest, &context); /* finish up 1st pass *//** perform outer MD5*/MD5Init(&context); /* init context for 2nd* pass */MD5Update(&context, k_opad, 64); /* start with outer pad */MD5Update(&context, digest, 16); /* then results of 1st* hash */MD5Final(digest, &context); /* finish up 2nd pass */ }

    更多精彩內(nèi)容且看:

    • 區(qū)塊鏈從入門到放棄系列教程-涵蓋密碼學(xué),超級賬本,以太坊,Libra,比特幣等持續(xù)更新
    • Spring Boot 2.X系列教程:七天從無到有掌握Spring Boot-持續(xù)更新
    • Spring 5.X系列教程:滿足你對Spring5的一切想象-持續(xù)更新
    • java程序員從小工到專家成神之路(2020版)-持續(xù)更新中,附詳細文章教程

    更多教程請參考flydean的博客

    總結(jié)

    以上是生活随笔為你收集整理的HMAC算法及其应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 精品国产精品三级精品av网址 | 人人搞人人 | 亚洲人免费 | 国产又粗又长又黄的视频 | 能看av的网站 | 成年网站免费在线观看 | 久久性感视频 | 五月天色小说 | 黑名单上的人全集免费观看 | 国产一区二区三区在线观看视频 | 国产一区二区三区视频免费在线观看 | 婷婷一区二区三区四区 | 香蕉网久久 | 懂色av一区二区三区免费 | 国产日韩在线一区 | 国产区精品区 | 97超碰人人澡人人爱学生 | 精品妇女一区二区三区 | 国产嫩草影视 | 台湾av在线播放 | 免费av一级片 | 在线资源站 | 深夜视频在线观看 | 羞羞网站在线看 | 91黄色免费视频 | 9999热视频| 激情午夜天 | 欧美在线精品一区二区三区 | 手机看片国产1024 | 激情综合站 | 国产又大又黑又粗免费视频 | 国产精品传媒在线 | 欧洲美女与动交zozzo | 成人免费av | 日本特黄网站 | 精品国精品国产自在久不卡 | 国产又色又爽无遮挡免费动态图 | 国产性一乱一性一伧一色 | 日韩性网站 | 亚洲av无码乱码国产精品 | 国产在线视频网 | 日韩av中文在线 | 成人午夜激情 | www日本视频| 久久大胆人体 | 爆乳熟妇一区二区三区霸乳 | 激烈的性高湖波多野结衣 | 久久久91 | 日本一区二区网站 | 国产人妻精品一区二区三区 | 精品区 | 8050午夜一级毛片久久亚洲欧 | 国产精品久久久久久久久晋中 | va婷婷在线免费观看 | 丁香七月婷婷 | 午夜精品一区二区三区在线 | 国产高潮国产高潮久久久91 | 亚洲午夜色 | 国产精品老女人 | 欧美一区二区激情 | 成人在线视频观看 | 蜜桃在线一区二区三区 | 貂蝉被到爽流白浆在线观看 | 99免费在线观看视频 | 成人乱人乱一区二区三区 | 精品白浆 | 欧美放荡性医生videos | 免费在线观看av网址 | 69国产 | 日本福利社 | 91资源在线观看 | 亚洲国产第一 | 精品无码一区二区三区免费 | 国产成人精品自拍 | 91亚洲精品一区 | 亚洲精品乱码久久久久99 | 看了下面会湿的视频 | 欧美视频一区二区三区四区在线观看 | 亚洲午夜精选 | 日本强好片久久久久久aaa | 国产精品swag | 国产网站入口 | 青青草原国产在线观看 | 免费看国产片在线观看 | 97国产在线 | 日本网站在线看 | 成人短视频在线播放 | 我的公把我弄高潮了视频 | 亚洲欧洲日韩 | 97免费人妻无码视频 | 噜啪啪 | 亚欧精品视频一区二区三区 | 天天干天天干天天 | 日本十大三级艳星 | jizzzz中国| 宿舍女女闺蜜调教羞辱 | 日韩中文一区二区三区 | 精久久久久久 | 国产在线激情视频 |