給MD5加上salt隨機鹽值加密算法實現密碼安全的php實現


給MD5加上salt隨機鹽值加密算法實現密碼安全的php實現

如果直接對密碼進行散列,那么黑客可以對通過獲得這個密碼散列值,然后通過查散列值字典(例如MD5密碼破解網站),得到某用戶的密碼。
加上salt后就會難上很多可以一定程度上解決問題,即便是黑客獲得了其中的salt和最終密文,破解也是相當麻煩的。

PS: 一般都是加密后的數據再存入到數據庫的,安全的數據是不可逆的,即數據庫里面的數據即使你知道他是通過md5,加鹽md5,base64等算法加密進去的也不可直接反推出內容,一般是通過輸入的內容加上加密算法后得出的跟數據庫里面對比。很多破解是用社工庫進行撞庫對比,你的帳號密碼在其他不安全網站給破解后拿來到其他網站嘗試撞庫。

如何加點鹽(salt)?
為了加強MD5的安全性加入了新的算法部分即加鹽值,然后散列,再比較散列值,已確定密碼是否正確。
加鹽值是隨機生成的一組字符串,可以包括隨機的大小寫字母、數字、字符,位數可以根據要求而不一樣,使用不同的加鹽值產生的最終密文是不一樣的:
1).得到明文的值
2).進行計算獲取MD5明文hash值
3).隨機生成加鹽值並插入
4).MD5插入加鹽值得到的hash
5).得到最終的密文

看一個簡單的加salt函數:
function do_hash($psw) {
$salt = 'aFXBxYmkClsw46y7b8C5qN56zs'; //定義一個salt值,最好夠長,或者隨機
return md5($psw,$salt); //返回加salt后的散列
}

注意:如果你是隨機生成salt值就得放入數據庫,不要用time()時間戳,避免被枚舉破解,簡單點可以配置一個固定salt值,如上。

一種復雜點加密方法:
function passCrypt($psw)
{
  $psw=md5($psw);
  $salt=substr($psw,-1,3);
  $psw=crypt($psw,$salt);
  return $psw;
}
先把密碼用MD5加密,然后截取其結果的一段,再用crypt加密,這兩個加密函數都是單向的,而且加密后的最終密碼是13位的,無論誰拿到手都不知道該怎么破解了,在密碼驗證時只需要將原始密碼用加密函數再加密一遍進行匹配就行了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM