浅谈MD5加密算法中的加盐值(SALT)
? ? ? ?我們知道,如果直接對密碼進行散列,那么***可以對通過獲得這個密碼散列值,然后通過查散列值字典(例如MD5密碼破解網站),得到某用戶的密碼。
加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;??//返回散列????
}
?>
調用方式:$new_password=hash($_POST[password]);???//這里接受表單提交值,并進行加密
下面詳細介紹一下加Salt散列的過程。介紹之前先強調一點,前面說過,驗證密碼時要使用和最初散列密碼時使用“相同的”佐料。所以Salt值是要存放在數據庫里的。
用戶注冊時,
用戶輸入【賬號】和【密碼】(以及其他用戶信息);
系統為用戶生成【Salt值】;
系統將【Salt值】和【用戶密碼】連接到一起;
對連接后的值進行散列,得到【Hash值】;
將【Hash值1】和【Salt值】分別放到數據庫中。
用戶登錄時,
用戶輸入【賬號】和【密碼】;
系統通過用戶名找到與之對應的【Hash值】和【Salt值】;
系統將【Salt值】和【用戶輸入的密碼】連接到一起;
對連接后的值進行散列,得到【Hash值2】(注意是即時運算出來的值);
比較【Hash值1】和【Hash值2】是否相等,相等則表示密碼正確,否則表示密碼錯誤。
有時候,為了減輕開發壓力,程序員會統一使用一個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管理員權限,如何而言輕松獲取到管理員權限。
轉載于:https://blog.51cto.com/taotie/1426539
總結
以上是生活随笔為你收集整理的浅谈MD5加密算法中的加盐值(SALT)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我的北京游戏开发总结【三】
- 下一篇: IOPS、带宽(band width)、