現在的md5密碼資料庫的資料量已經非常龐大了,大部分常用密碼都可以通過md5摘要反向查詢到密碼明文。為了防止內部人員(能夠接觸到資料庫或者資料庫備份檔案的人員)和外部入侵者通過md5反查密碼明文,更好地保護使用者的密碼和個人帳戶安全(乙個使用者可能會在多個系統中使用同樣的密碼,因此涉及到使用者在其他**和系統中的資料安全),需要對md5摘要結果摻入其他資訊,稱之為加鹽。
加鹽的演算法有很多,考慮到加鹽的目的(防止擁有系統底層許可權的人員),想做到絕對不可反查是很困難的,需要有其他軟體或者硬體的協助,在很多場景下的實用性比較差。如果只是想增加反查的難度,倒是有很多方法可以選擇,一種便利的方法是md5(password+username),即將使用者名稱和密碼字串相加再md5,這樣的md5摘要基本上不可反查。但有時候使用者名稱可能會發生變化,發生變化後密碼即不可用了(驗證密碼實際上就是再次計算摘要的過程)。
因此我們做了乙個非常簡單的演算法,每次儲存密碼到資料庫時,都生成乙個隨機16位數字,將這16位數字和密碼相加再求md5摘要,然後在摘要中再將這16位數字按規則摻入形成乙個48位的字串。在驗證密碼時再從48位字串中按規則提取16位數字,和使用者輸入的密碼相加再md5。按照這種方法形成的結果肯定是不同反查的,且同乙個密碼每次儲存時形成的摘要也都是不同的。如以下**所示:
/*** 生成含有隨機鹽的密碼
*/public static string generate(string password)
return new string(cs);
}/**
* 校驗密碼是否正確
*/public static boolean verify(string password, string md5)
string salt = new string(cs2);
return stringutil.md5hex(password + salt).equals(new string(cs1));
}
md5演算法簡單實現
md5演算法步驟詳解 md5演算法的c 實現 看完網上文件後,主要的問題是,對於輸入的資訊你要怎麼進行補位這些操作啊?因為自己是渣渣,而且又沒有深究,所以就姑且用vector來實現了,也不夠優,還是有機會就再來優化吧!直接上 標頭檔案 mymd5.h ifndef mymd5 h define my...
MD5加鹽,實現一人一密
理論上md5是不可逆的,而且md5本來也不是作加密使用,而是用來校驗資料的完整性,只是因為其不可逆且穩定 快速的特點,被廣泛用於對明文密碼的加密。至今仍然後很多開發人員相信md5的保密性,也許因為他們知道md5的演算法,覺得hash不可逆。但實際上,真正要破解md5的人,不會選擇逆向逆的明文,都是用...
MD5演算法及其加鹽實現使用者安全登入
日常生活中登入某系統或者登入社交軟體中會涉及使用者名稱及登入密碼等,可用md5演算法對密碼進行轉換儲存 注意md5不是加密,有加密必有解密 由於md5的不可逆和抗碰撞使得密碼儲存更加安全。資料轉換md5值的方法 public static string ge 5 string sdatain ret...