前言
通常情況下,我們加密密碼或者其他字符串,都會採用md5的方式進行加密,但是我們常常看到有很多網站採用了md5+鹽值的加密,這到底有什麼好處呢?普通的md5加密又有哪些缺點呢?本文我們就來聊聊鹽值加密的作用以及實現方法。
一、普通加密方式的侷限
通常情況下,我們會把密碼直接進行md5加密,加密後進行存儲,然後每次登錄校驗都是拿md5後的字符串進行校驗,這樣相對於明文存儲是大大降低了風險性。
但是如果黑客可以對通過獲得這個密碼散列值,然後通過查散列值字典,其實也可以得到用戶的密碼,所以這種方式也是安全性不夠高的。
二、鹽值加密的原理和作用
加Salt可以一定程度上解決這一問題。所謂加Salt方法,就是當用戶註冊時,由系統自動往這個密碼里加一段字符串,然後再散列。註冊完成後,系統會把加密後的字符串以及剛纔加的字符串都存入數據庫。而當用戶登錄時,系統爲用戶提供的密碼和用戶名查出數據庫存儲的鹽值字符串,然後散列,再比較散列值,已確定密碼是否正確。
這裏加的字符串被稱作“Salt值”,這個值是由系統隨機生成的,並且只有系統知道。這樣,即便兩個用戶使用了同一個密碼,由於系統爲它們生成的salt值不同,他們的散列值也是不同的。那麼黑客則難以通過自己的密碼和自己生成的散列值來找具有特定密碼的用戶。
三、md5+鹽值加密的實現
一個簡單的加鹽MD5算法可以用php實現如下:
function do_hash($psw)
{
$salt = 'aFXBxYmkClsw46y7b8C5qN56zs'; //定義一個salt值,最好夠長,或者隨機
return md5($psw,$salt); //返回加salt後的散列
}
我們也可以在md5之後再加上鹽值進行再一次md5,或者對其中一段進行截取形成複雜一點的加密算法,如下:
function passCrypt($psw)
{
$psw=md5($psw);
$salt=substr($psw,-1,3);
$psw=crypt($psw,$salt);
return $psw;
}
四、含加鹽值MD5算法的應用
目前多家的網站程序公司都已經加入了該算法,如常見的VBB論壇、discuz論壇等都採用了,甚至著名的Linux開源操作系統早已經加入了這種加密模式。可得而知,這種算法勢必會在未來應用於更多的範圍。
參考文章:
1、https://blog.csdn.net/blade2001/article/details/6341078
2、https://segmentfault.com/a/1190000003024932