咱們知道,若是直接對密碼進行散列,那麼黑客能夠對經過得到這個密碼散列值,而後經過查散列值字典(例如MD5密碼破解網站),獲得某用戶的密碼。php
加Salt能夠必定程度上解決這一問題。所謂加Salt方法,就是加點「佐料」。其基本想法是這樣的:當用戶首次提供密碼時(一般是註冊時),由系統自動往這個密碼裏撒一些「佐料」,而後再散列。而當用戶登陸時,系統爲用戶提供的代碼撒上一樣的「佐料」,而後散列,再比較散列值,已肯定密碼是否正確。程序員
這裏的「佐料」被稱做「Salt值」,這個值是由系統隨機生成的,而且只有系統知道。這樣,即使兩個用戶使用了同一個密碼,因爲系統爲它們生成的salt值不一樣,他們的散列值也是不一樣的。即使黑客能夠經過本身的密碼和本身生成的散列值來找具備特定密碼的用戶,但這個概率過小了(密碼和salt值都得和黑客使用的同樣才行)。算法
下面以PHP示例,講解md5($pass.$salt)加密函數。數據庫
<?php
function hash($a) {
$salt=」Random_KUGBJVY」; //定義一個salt值,程序員規定下來的隨機字符串
$b=$a.$salt; //把密碼和salt鏈接
$b=md5($b); //執行MD5散列
return $b; //返回散列
}
?>windows
調用方式:$new_password=hash($_POST[password]); //這裏接受表單提交值,並進行加密安全
下面詳細介紹一下加Salt散列的過程。介紹以前先強調一點,前面說過,驗證密碼時要使用和最初散列密碼時使用「相同的」佐料。因此Salt值是要存放在數據庫裏的。dom
用戶註冊時,函數
用戶登陸時,測試
有時候,爲了減輕開發壓力,程序員會統一使用一個salt值(儲存在某個地方),而不是每一個用戶都生成私有的salt值。網站
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
您是否碰見過破解不了的MD5值?你是否碰見過‘奇形怪狀’的hash?這些很是有可能就是帶有salt(俗稱加鹽值),本文將爲你們簡單的介紹關於加鹽值的一些信息。
0×01. 什麼是加鹽值?
爲了增強MD5的安全性(自己是不可逆的),從而加入了新的算法部分即加鹽值,加鹽值是隨機生成的一組字符串,能夠包括隨機的大小寫字母、數字、字符,位數能夠根據要求而不同,使用不一樣的加鹽值產生的最終密文是不同的。
0×02. 代碼中如何使用加鹽值?
因爲使用加鹽值之後的密碼至關的安全,即使是你得到了其中的salt和最終密文,破解也是一個耗費至關多時間的過程,能夠說是破解單純MD5的好幾倍,那麼使用加鹽值之後的密文是如何產生的呢?
1).首先咱們獲得的是明文的hash值
2).進行計算獲取MD5明文hash值
3).隨機生成加鹽值並插入
4).MD5插入加鹽值獲得的hash
5).獲得最終的密文
0×03. 如何破解出帶有加鹽值的密文
由於像windows hash(未進行syskey加密)、非加鹽值MD5等均可以經過大型的密碼(如彩虹表)表進行對比解密,因此相對而言至關的輕鬆,而帶有加鹽值的密文就相對而言複雜的多,如今的MD5表大概是260+G,如何加鹽值的可能性有10000個,那麼密碼錶的應該是MD5 size*10000,就能夠解密出原MD5表可以解密的密碼了,一些網站也提供了對應的salt解密,可是測試之後效果並非很是好,如常規的admin888也未解密出,實在是遺憾,畢竟MD5本是不可逆的,帶入隨機值解密出最終密碼的可能性就更低了,至少是相對大多數人而言的。
0×04. 含加鹽值MD5算法的應用
目前多家的網站程序公司都已經加入了該算法,如常見的VBB論壇、discuz論壇等都採用了,甚至著名的Linux開源操做系統早已經加入了這種加密模式。可得而知,這種算法勢必會在將來應用於更多的範圍。
*0×05. 如何滲透帶有加鹽值的站點(實際案例)?這一段信息是來源於我近日實際滲透的片斷,因爲經過多種途徑沒法解密帶有加鹽值的密文,因此只能經過其餘方式進行突破,本欲修改管理員密碼來進行操做,但站點是經過多個網站對比密碼的形式,如站A和站B,我若是修改站A的密碼,一旦對比站A和站B,那麼將會提示沒法登錄,由於我只擁有一個站的管理權限,那麼這樣就很是的麻煩了,一是密文沒法破解,而是修改密碼無效。那麼咱們應該如何處理呢?這裏簡述下本人在這裏應用的方法:1).修改admin uid爲沒有啓用的某值2).將本身的註冊用戶修改成admin uid的值從新登錄,併成功獲取權限,由於在站A中式依據uid來分配權限的,也就是給某uid管理員權限,如何而言輕鬆獲取到管理員權限。