mysql身份驗證

2021-12-30 12:12:01 字數 1594 閱讀 2013

mysql身份驗證

mysql的身份認證協議是一種chap協議,即,挑戰應答。

s->c : public_seed

c->s: username, reply

s->c: ok or error

對於4.1及以後版本,public_seed是隨機生的20個可列印的ascii字元

然後客戶端這麼計算reply:

passphrase=sha1("password")

storedhash=sha1(passphrase)

reply=xor(passphrase, sha1(public_seed,storedhash)

其中storedhash即是伺服器存在資料庫中的hash過的密碼。

然後伺服器在收到reply後這麼對比:

先從資料庫中根據username查到storedhash。

然後計算passphrase。原理是xor是可逆的。

passphrase=xor(reply, sha1(public_seed,storedhash))

然後對passphrase做sha1,和storedhash做二進位制比較

sha1(passphrase)==storedhash  

首先,我們知道,使用者密碼是儲存在mysql.user這個表的password列,並且是以hash值的形式加密儲存的。  

整個驗證過程如下:當客戶端請求連線時,  

1.伺服器端會隨機生成乙個random string傳送給客戶端;  

2.客戶端收到random string後,進行hash加密

第一步,將密碼hash,得到hash值hash_stage1;  eg.hash_stage1=sha1("password"); 

第二步,二次hash,得到hash_stage2;  eg. hash_stage2=sha1(hash_stage1);

第三步,將密碼二次hash得到的值與random string進行hash,得到hash_stage3; eg. hash_stage3=sha1("random string",hash_stage2);

第四步,異或處理準備傳送給伺服器端,得到reply=xor(hash_stage1,hash_stage3);

最後,將reply的值傳送給伺服器端。  

3.伺服器端收到reply後同樣進行hash運算

第一步,將儲存的hash形式的密碼hashpassword與random string進行hash,得到server_hash_stage1=sha1("random string","hashpassword");

第二步,將客戶端傳送的reply與剛才得到的hash值進行異或運算,得到xor_value; eg. xor_value=xor(reply,server_hash_stage1);

第三步,將得到的異或值進行hash,得到server_hash_stage2; eg. server_hash_stage2=sha1(server_hash_stage1);

第四步,驗證,將最後得到的hash值server_hash_stage2與儲存的密碼hashpassword進行比較。eg.   server_hash_stage2==hashpassword,相等則驗證通過。

Forms 身份驗證

配置應用程式使用 forms 身份驗證 如果應用程式的根目錄中有 web.config 檔案,請開啟該檔案。複製 在system.web元素中,建立乙個authentication元素,並將它的mode屬性設定為 forms,如下面的示例所示 複製 在authentication元素中,建立乙個fo...

WebService身份驗證

web service身份驗證解決方案一 通過通過soap header身份驗證。1.我們實現乙個用於身份驗證的類,檔名mysoapheader.cs mysoapheader類繼承自system.web.services.protocols.soapheader。且定義了兩個成員變數,userna...

WebServices身份驗證

最近遇到乙個問題,暴露在網路上的web service如何做身份驗證,而不被其他人說是用。mysoapheader.cs類 using system using system.collections.generic using system.linq using system.web namespa...