MD5實現HTTP摘要認證

2021-09-26 08:10:44 字數 2740 閱讀 3916

摘要演算法又稱雜湊演算法,它表示輸入任意長度的資料,輸出固定長度的資料,它的主要特徵是加密過程不需要金鑰,並且經過加密的資料無法被解密,目前可以被解密逆向的只有crc32演算法,只有輸入相同的明文資料經過相同的訊息摘要演算法才能得到相同的密文。訊息摘要演算法不存在金鑰的管理與分發問題,適合於分布式網路上使用。由於其加密計算的工作量相當巨大,所以以前的這種演算法通常只用於資料量有限的情況下的加密,訊息摘要演算法分為三類:

md(message digest):訊息摘要

sha(secure hash algorithm):安全雜湊

mac(message authentication code):訊息認證碼

這三類演算法的主要作用:驗證資料的完整性

訊息摘要演算法是有關於數字簽名的核心演算法,下面講解md5的乙個應用:http中的摘要認證機制。

1、http摘要認證主要通過4個方法保證使用者的認證安全和隱私:

(1)通過傳遞使用者名稱,密碼等計算出來的摘要來解決明文方式在網路上傳送密碼的問題。

(2)通過服務產生隨機數nonce的方式可以防止惡意使用者捕獲並重放認證的握手過程。

(3)通過客戶端產生隨機數cnonce的方式,支援客戶端對伺服器的認證。

(4)通過對內容也加入摘要計算的方式,可以有選擇的防止對報文內容的篡改

2、摘要認證的握手過程

(1)客戶端請求

host: localhost(2)伺服器響應

伺服器產生乙個隨機數nonce,伺服器將這個隨機數放在www-authenticate響應頭,與伺服器支援的認證演算法列表,認證的域realm一起傳送給客戶端,如下例子:

content-type: text/html(3)客戶端請求 (使用者名稱 「mufasa」, 密碼 「circle of life」)

客戶端發現是401響應,表示需要進行認證,則彈出讓使用者輸入使用者名稱和密碼的認證視窗,客戶端採用md5計算出密碼和其他資料的摘要,將摘要放到authorization的請求頭respons中傳送給伺服器,如果客戶端要對伺服器也進行認證,這個時候,可以傳送客戶端隨機數cnonce。如下例子:

host: localhost

authorization: digest username="mufasa",

realm="[email protected]",

nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",

uri="/dir/index.html",

qop=auth,

nc=00000001,

cnonce="0a4f113b",

response="6629fae49393a05397450978507c4ef1",

opaque="5ccc069c403ebaf9f0171e9517f40e41"(4)伺服器響應

服務接受摘要,通過md5演算法以及服務端儲存的密碼等資料,重新計算新的摘要跟客戶端傳輸的摘要進行比較,驗證是否匹配,若客戶端反過來用客戶端隨機數對伺服器進行質詢,就會建立客戶端摘要,服務可以預先將下乙個隨機數計算出來,提前傳遞給客戶端,通過authentication-info傳送下乙個隨機數。如下例子:

cnonce=」 ***xx234132543strwerr65sgdrftdfytryts」3.客戶端生成的摘要資訊如何得到?

response 值由三步計算而成。當多個數值合併的時候,使用冒號作為分割符,摘要計算的資訊塊主要有兩種:

(1) 表示與安全相關的資料:對使用者名稱、認證域(realm)以及密碼的合併值計算 md5 雜湊值,結果稱為

ha1 = md5(::)
(2) 表示與報文相關的資料: 對http方法以及uri的摘要的合併值計算 md5 雜湊值,主要目的是有助於防止反覆,資源或者報文被篡改,結果稱為

ha2 = md5(:)
例如:「get」 和 「/dir/index.html」

(3) 對 ha1、伺服器密碼隨機數(nonce)、請求計數(nc)、客戶端密碼隨機數(cnonce)、保護質量(qop)以及 ha2 的合併值計算 md5 雜湊值。結果即為客戶端提供的 response 值。

hd=nonce:noncecount:cnonce:qop;

response = md5(ha1:hd:ha2)

MD5摘要演算法實現

網上找到的實現md5函式 包括乙個標頭檔案md5.h和乙個原始檔md5.c,用下面的測試 test.c測試通過,各檔案依次如下 標頭檔案md5.h 1 ifndef md5 h 2 define md5 h 34 typedef struct 5md5 ctx 1011 12 define f x,...

MD5訊息摘要的C 實現

計算md5是進行apk分析的最基本操作之一,在mobsf中,由於python的第三方庫十分豐富,要計算md5只需要匯入hashlib這個庫就可以了,但是在c 中,這個東西還得自己實現。本文對github上的乙個md5計算的專案進行擴充套件,使得其可以進行字串md5計算的update操作和對檔案的md...

OSPF區域MD5認證

a 在區域內驗證 b 配置命令 驗證方式 area 區域號 authentication message digest 簡單密碼 ip ospfmessage digest key 1 md5密碼 檢視認證方式 show ipospf inte ce c 認證成功,能建立鄰居關係 解釋 messag...