使用者名稱密碼加密演算法 MD5 加鹽

2021-08-14 23:59:56 字數 1280 閱讀 2500

一、第一代密碼

第一代密碼使用者名稱的密碼直接儲存在伺服器的資料庫上,一旦資料庫洩漏,資料庫裡的使用者名稱和密碼都是明文的。

二、第二代密碼

第二代密碼將使用者名稱密碼用md5演算法加密,把加密後的密碼存入伺服器資料庫中。當使用者下次輸入密碼登陸的時候可以經過md5運算,將運算值和資料庫中的密碼比較,如果一致代表密碼正確,匹配上。如果資料庫洩漏,得到的也只是經過md5加密的密碼。

但是這裡就有問題了,會有好事者收集常用密碼,經過md5運算,把密碼和加密後的密碼做成乙個資料字典。如果我們的密碼比較簡單,正好在那個資料字典裡,一旦後台資料庫洩漏,使用者的密碼也能知道。現在網上有**能查詢md5有沒有被破解。

三、第三代密碼

加鹽處理。隨機生成一系列的值,叫作salt,放在使用者名稱的開頭,中間或者最後,這個自己伺服器約定即可,然後將新生成的密碼用md5運算,得到新的密碼,存入資料庫中,記得salt也要存入資料庫中。這樣在使用者下次登入的時候也可以驗證。

加鹽的好處使得密碼更難破解。

比如說我有乙個資料字典庫有n = 500w條密碼。洩漏的資料庫裡有m = 30萬條**。如果沒加鹽,我得到洩漏的資料庫後,一一和資料字典比對就好,碰到相同的,我就知道了原來的密碼了。全部比對完的時間複雜度是o(m*n)。

如果加鹽後,有30萬條鹽。我要破解一條的代價是 我要從資料字典裡選一條明文密碼,在洩漏的資料庫中選一條鹽,匹配進行md5運算,然後在資料字典裡查詢。時間複雜度是o(n),一共要進行m*n次比對,所以時間複雜度是o(m*n*n)。破解難度大大提高。

md5演算法的**如下

public

static string md5(string key) ;

try

return

new string(str);

} catch (exception e)

}

user = new user();

user.setname(username);

user.setsalt(uuid.randomuuid().tostring().substring(0, 5)); //加鹽

string head = string.format("", new random().nextint(1000));

user.setheadurl(head);

user.setpassword(toutiaoutil.md5(password+user.getsalt())); //md5運算

userdao.adduser(user);

md5加密演算法

md5.h ifndef md5h define md5h include include void rol unsigned int s,unsigned short cx 32位數迴圈左移實現函式 void ltob unsigned int i b l互轉,接受uint型別 unsigned ...

MD5加密演算法

md5訊息摘要演算法 message digest algorithm 它對輸入的任意長度的訊息進行運算,產生乙個128位的訊息摘要。演算法原理 資料填充 填充訊息使其長度與448模512同餘 長度 448 mod 512 即時訊息長度本身已經滿足了上述長度要求也需要填充。填充方法 附乙個1在訊息後...

加密演算法 MD5

一 簡介 md5的全稱是message digest algorithm 5 資訊摘要演算法 在90年代初由mit laboratory for computer science和rsa data security inc的ronald l.rivest開發出來,經md2 md3和md4發展而來。訊...