MySQL密碼驗證實現原理

2021-06-07 03:05:50 字數 1009 閱讀 1630

這篇文章可以幫助您深入理解mysql是如何進行密碼驗證的。

首先,我們知道,使用者密碼是儲存在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,相等則驗證通過。

MySQL密碼驗證實現原理

mysql密碼驗證實現原理 這篇文章可以幫助您深入理解mysql是如何進行密碼驗證的。首先,我們知道,使用者密碼是儲存在mysql.user這個表的password列,並且是以hash值的形式加密儲存的。www.2cto.com 整個驗證過程如下 當客戶端請求連線時,1.伺服器端會隨機生成乙個ran...

滑動驗證實現

滑鼠按下 移動 鬆開的之後,通過滑鼠鬆開之後與初始位置的偏移量加上滑動塊的寬度來計算滑動進度的div的寬度,在內層的滑動塊始終向右浮動就行了。滑鼠移動過程中,越界問題處理 移動滑鼠 document.onmousemove function e 滑動過程中,向右越界處理 if objx slideb...

Rails Digest認證實現和原理

優勢 http digest是一種http 不僅限於web頁面 認證框架,相比通常使用的基本認證,digest認證的優點是相對安全 基於網路標準和簡單,它不需要編寫登入表單頁面,對登入資訊進行加密,這樣就可以很好的支援較安全的程式自動連線 非瀏覽器連線 可以廣泛的應用到資料服務領域。實現 在rail...