『壹』 MD5和HASH區別
Hash,一般翻譯做「散列」,也有直接音譯為"哈希"的,就是把任意長度的輸入(又叫做預映射, pre-image),通過散列演算法,變換成固定長度的輸出,該輸出就是散列值。這種轉換是一種壓縮映射,也就是,散列值的空間通常遠小於輸入的空間,不同的輸入可能會散列成相同的輸出,而不可能從散列值來唯一的確定輸入值。
關鍵特性:單向性抗沖突性映射分布均勻性和差分分布均勻性
而MD5可以說是目前應用最廣泛的Hash演算法
『貳』 哈希加密演算法
MD5即Message-Digest Algorithm 5(信息摘要演算法5),是計算機廣泛使用的散列演算法之一。經MD2、MD3和MD4發展而來,誕生於20世紀90年代初。用於確保信息傳輸完整一致。雖然已被破解,但仍然具有較好的安全性,加之可以免費使用,所以仍廣泛運用於數字簽名、文件完整性驗證以及口令加密等領域。
演算法原理:
散列演算法得到的結果位數是有限的,比如MD5演算法計算出的結果字長為128位,意味著只要我們窮舉2^128次,就肯定能得到一組碰撞,下面讓我們來看看一個真實的碰撞案例。我們之所以說MD5過時,是因為它在某些時候已經很難表現出散列演算法的某些優勢——比如在應對文件的微小修改時,散列演算法得到的指紋結果應當有顯著的不同,而下面的程序說明了MD5並不能實現這一點。
而諸如此類的碰撞案例還有很多,上面只是原始文件相對較小的一個例子。事實上現在我們用智能手機只要數秒就能找到MD5的一個碰撞案例,因此,MD5在數年前就已經不被推薦作為應用中的散列演算法方案,取代它的是SHA家族演算法,也就是安全散列演算法(Secure Hash Algorithm,縮寫為SHA)。
SHA實際包括有一系列演算法,分別是SHA-1、SHA-224、SHA-256、SHA-384以及SHA-512。而我們所說的SHA2實際是對後面4中的統稱。各種SHA演算法的數據比較如下表,其中的長度單位均為位:
MD5和SHA1,它們都有4個邏輯函數,而在SHA2的一系列演算法中都採用了6個邏輯函數。
以SHA-1為例,演算法包括有如下的處理過程:
和MD5處理輸入方式相同
經過添加位數處理的明文,其長度正好為512位的整數倍,然後按512位的長度進行分組,可以得到一定數量的明文分組,我們用Y 0 ,Y 1 ,……Y N-1 表示這些明文分組。對於每一個明文分組,都要重復反復的處理,這些與MD5都是相同的。
而對於每個512位的明文分組,SHA1將其再分成16份更小的明文分組,稱為子明文分組,每個子明文分組為32位,我們且使用M[t](t= 0, 1,……15)來表示這16個子明文分組。然後需要將這16個子明文分組擴充到80個子明文分組,我們將其記為W[t](t= 0, 1,……79),擴充的具體方法是:當0≤t≤15時,Wt = Mt;當16≤t≤79時,Wt = ( W t-3 ⊕ W t-8 ⊕ W t-14 ⊕ W t-16 ) <<< 1,從而得到80個子明文分組。
所謂初始化緩存就是為鏈接變數賦初值。前面我們實現MD5演算法時,說過由於摘要是128位,以32位為計算單位,所以需要4個鏈接變數。同樣SHA-1採用160位的信息摘要,也以32位為計算長度,就需要5個鏈接變數。我們記為A、B、C、D、E。其初始賦值分別為:A = 0x67452301、B = 0xEFCDAB89、C = 0x98BADCFE、D = 0x10325476、E = 0xC3D2E1F0。
如果我們對比前面說過的MD5演算法就會發現,前4個鏈接變數的初始值是一樣的,因為它們本來就是同源的。
經過前面的准備,接下來就是計算信息摘要了。SHA1有4輪運算,每一輪包括20個步驟,一共80步,最終產生160位的信息摘要,這160位的摘要存放在5個32位的鏈接變數中。
在SHA1的4論運算中,雖然進行的就具體操作函數不同,但邏輯過程卻是一致的。首先,定義5個變數,假設為H0、H1、H2、H3、H4,對其分別進行如下操作:
(A)、將A左移5為與 函數的結果求和,再與對應的子明文分組、E以及計算常數求和後的結果賦予H0。
(B)、將A的值賦予H1。
(C)、將B左移30位,並賦予H2。
(D)、將C的值賦予H3。
(E)、將D的值賦予H4。
(F)、最後將H0、H1、H2、H3、H4的值分別賦予A、B、C、D
這一過程表示如下:
而在4輪80步的計算中使用到的函數和固定常數如下表所示:
經過4輪80步計算後得到的結果,再與各鏈接變數的初始值求和,就得到了我們最終的信息摘要。而對於有多個明文分組的,則將前面所得到的結果作為初始值進行下一明文分組的計算,最終計算全部的明文分組就得到了最終的結果。
『叄』 MD5與SHA1 HASH有什麼相同點與不同點
HASH是根據文件的內容的數據通過邏輯運算得到的數值, 不同的文件(即使是相同的文件名)得到的HASH值是不同的, 所以HASH值就成了每一個文件在EMULE里的身份證. 不同HASH值的文件在EMULE里被認為是不同的文件,相同的HASH值的文件的內容肯定是完全相同(即使文件名不同). HASH值還有文件校驗的功能,相當於文件的校驗碼. 所以還可以用來檢查文件下載是否正確(所以EMULE下載完畢時,都會在HASH文件一遍, 檢查文件是否出錯)
打個比喻,文件的SHA1值就像人的指紋,是文件的數字指紋,是唯一的,一個文件對應一個唯一的SHA1值,一般用來確認你的文件和官方發布的是否一致.如果官方原版文件被別人做過手腳,那麼算出來的SHA1值就會不同.所以SHA1值是用來「驗明正身」的。有些居心叵測的人在官方系統光碟裡面加入木馬程序、廣告程序等,然後再放出來給人下載,如果你不檢查SHA1值就貿然安裝就中招了,可以在網上下載一個數字指紋檢驗器來計算你下載回來的win7系統文件的SHA1值,然後到微軟的MSDN去查看官方發布的SHA1值,如果兩者相等,說明你下載的文件是和官方提供的是一樣的,你可以放心的安裝了。這就是SHA1值的用處,其他地方不用SHA1值的。
操作系統的ISO文件一般可以直接刻盤安裝,不用解壓出來。為了保險起見你最好用「UltraISO」軟體打開你的ISO文件,如果顯示為「可啟動XX文件」那麼你就放心直接刻錄吧。
MD5的
md5
典型應用是對一段信息(Message)產生信息摘要(Message-Digest),以防止被篡改。比如,在UNIX下有很多軟體在下載的時候都有一個文件名相同,文件擴展名為.md5的文件,在這個文件中通常只有一行文本,大致結構如:
MD5 (tanajiya.tar.gz) =
這就是tanajiya.tar.gz文件的數字簽名。MD5將整個文件當作一個大文本信息,通過其不可逆的字元串變換演算法,產生了這個唯一的MD5信息摘要。為了讓讀者朋友對MD5的應用有個直觀的認識,筆者以一個比方和一個實例來簡要描述一下其工作過程:
大家都知道,地球上任何人都有自己獨一無二的指紋,這常常成為公安機關鑒別罪犯身份最值得信賴的方法;與之類似,MD5就可以為任何文件(不管其大小、格式、數量)產生一個同樣獨一無二的「數字指紋」,如果任何人對文件做了任何改動,其MD5值也就是對應的「數字指紋」都會發生變化。
我們常常在某些軟體下載站點的某軟體信息中看到其MD5值,它的作用就在於我們可以在下載該軟體後,對下載回來的文件用專門的軟體(如Windows MD5 Check等)做一次MD5校驗,以確保我們獲得的文件與該站點提供的文件為同一文件。利用MD5演算法來進行文件校驗的方案被大量應用到軟體下載站、論壇資料庫、系統文件安全等方面。
『肆』 加密方式有幾種
加密方式的種類:
1、MD5
一種被廣泛使用的密碼散列函數,可以產生出一個128位(16位元組)的散列值(hash value),用於確保信息傳輸完整一致。MD5由美國密碼學家羅納德·李維斯特(Ronald Linn Rivest)設計,於1992年公開,用以取代MD4演算法。這套演算法的程序在 RFC 1321 標准中被加以規范。
2、對稱加密
對稱加密採用單鑰密碼系統的加密方法,同一個密鑰可以同時用作信息的加密和解密,這種加密方法稱為對稱加密,也稱為單密鑰加密。
3、非對稱加密
與對稱加密演算法不同,非對稱加密演算法需要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是一對,如果用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密。
如果用私有密鑰對數據進行加密,那麼只有用對應的公開密鑰才能解密。因為加密和解密使用的是兩個不同的密鑰,所以這種演算法叫作非對稱加密演算法。
(4)hash加密與md5加密擴展閱讀
非對稱加密工作過程
1、乙方生成一對密鑰(公鑰和私鑰)並將公鑰向其它方公開。
2、得到該公鑰的甲方使用該密鑰對機密信息進行加密後再發送給乙方。
3、乙方再用自己保存的另一把專用密鑰(私鑰)對加密後的信息進行解密。乙方只能用其專用密鑰(私鑰)解密由對應的公鑰加密後的信息。
在傳輸過程中,即使攻擊者截獲了傳輸的密文,並得到了乙的公鑰,也無法破解密文,因為只有乙的私鑰才能解密密文。
同樣,如果乙要回復加密信息給甲,那麼需要甲先公布甲的公鑰給乙用於加密,甲自己保存甲的私鑰用於解密。
『伍』 MD5加密和MD5hash的區別
MD5加密和MD5 hash的區別為:摘要不同、攻擊強度不同、運行速度不同。
一、摘要不同
1、MD5加密:MD5加密摘要比MD5摘要短32bit,是264 是數量級的操作。
2、MD5 hash:MD5 hash摘要比MD5摘要長32bit,是280 數量級的操作。
二、攻擊強度不同
1、MD5加密:MD5加密對於強行攻擊,產生任何一個報文的強度更弱。
2、MD5 hash:MD5 hash對於強行攻擊,產生任何一個報文的強度更大。
三、運行速度不同
1、MD5加密:MD5加密的循環步驟比MD5 hash少,且要處理的緩存小,導致運行速度比MD5hash快。
2、MD5 hash:MD5 hash的循環步驟比MD5加密多,且要處理的緩存大,導致運行速度比MD5 加密慢。
『陸』 md5和hash有什麼聯系,詳細易懂點,再強調一遍,易懂點
你可以看括弧里的例子:
HASH是信息安全領域中
加密演算法
,他把一些不同長度的
信息轉化
成雜亂的128位的編碼里,叫做HASH值.
也可以說,hash就是找到一種數據內容和數據存放地址之間的映射關系(就像摩斯
電碼
一樣電報嘀嘀嘀想幾下如果那幾下有3長1短,那麼在通信雙方都有的小本子里找3長1短代表什麼字就行了),而
md5
hash
就是以md5
加密演算法
的hash值,要破解的時候就要以
md5
加密演算法逆向進行...
(也就是說平時說的
md5
碼也就是md5
hash碼只不過為了簡便把hash給省略了)這就是聯系吧~
常見的
加密演算法
有sha-1
hash,
md5
hash,haval
hash,ripemd
hash
『柒』 MD5加密和哈希演算法是什麼
MD5(Message-Digest Algorithm 5,信息-摘要演算法 5),用於確保信息傳輸完整一致。是計算機廣泛使用的雜湊演算法之一(又譯摘要演算法、哈希演算法、Hash演算法),主流編程語言普遍已有MD5實現。將數據(如英文字元串,漢字,文件等)運算為另一固定長度值是雜湊演算法的基礎原理,MD5的前身有MD2、MD3和MD4。 哈希演算法將任意長度的二進制值映射為固定長度的較小二進制值,這個小的二進制值稱為哈希值。哈希值是一段數據唯一且極其緊湊的數值表示形式。如果散列一段明文而且哪怕只更改該段落的一個字母,隨後的哈希都將產生不同的值。要找到散列為同一個值的兩個不同的輸入,在計算上是不可能的,所以數據的哈希值可以檢驗數據的完整性。
哈希表是根據設定的哈希函數H(key)和處理沖突方法將一組關鍵字映象到一個有限的地址區間上,並以關鍵字在地址區間中的象作為記錄在表中的存儲位置,這種表稱為哈希表或散列,所得存儲位置稱為哈希地址或散列地址。作為線性數據結構與表格和隊列等相比,哈希表無疑是查找速度比較快的一種。
『捌』 MD5和Hash有什麼區別和聯系,盡量用簡潔的語言描述
Hash是一種特殊的演算法,MD5就是其中常用的一種。它的演算法的特徵是不可逆性,並且才計算的時候所有的數據都參與了運算,其中任何一個數據變化了都會導致計算出來的Hash值完全不同,所以通常用來校驗數據是否正確或用作身份驗證。
常見的,論壇裡面用戶的密碼是經過MD5等Hash演算法算出來的Hash值進行保存的。
在通常的網路下載中,會帶有一個Hash值,這個值是用來校驗你下載的文件是否損壞並保證尚未被別人篡改的。
『玖』 開發中常見的加密方式及應用
開發中常見的加密方式及應用
一、base64
簡述:Base64是網路上最常見的用於傳輸8Bit 位元組碼 的編碼方式之一,Base64就是一種基於64個可列印字元來表示二進制數據的方法。所有的數據都能被編碼為並只用65個字元就能表示的文本文件。( 65字元:A~Z a~z 0~9 + / = )編碼後的數據~=編碼前數據的4/3,會大1/3左右(圖片轉化為base64格式會比原圖大一些)。
應用:Base64編碼是從二進制到字元的過程,可用於在 HTTP 環境下傳遞較長的標識信息。例如,在Java Persistence系統Hibernate中,就採用了Base64來將一個較長的唯一 標識符 (一般為128-bit的UUID)編碼為一個字元串,用作HTTP 表單 和HTTP GET URL中的參數。在其他應用程序中,也常常需要把二進制 數據編碼 為適合放在URL(包括隱藏 表單域 )中的形式。此時,採用Base64編碼具有不可讀性,需要解碼後才能閱讀。
命令行進行Base64編碼和解碼
編碼:base64 123.png -o 123.txt
解碼:base64 123.txt -o test.png -D Base64編碼的原理
原理:
1)將所有字元轉化為ASCII碼;
2)將ASCII碼轉化為8位二進制;
3)將二進制3個歸成一組(不足3個在後邊補0)共24位,再拆分成4組,每組6位;
4)統一在6位二進制前補兩個0湊足8位;
5)將補0後的二進制轉為十進制;
6)從Base64編碼表獲取十進制對應的Base64編碼;
Base64編碼的說明:
a.轉換的時候,將三個byte的數據,先後放入一個24bit的緩沖區中,先來的byte占高位。
b.數據不足3byte的話,於緩沖區中剩下的bit用0補足。然後,每次取出6個bit,按照其值選擇查表選擇對應的字元作為編碼後的輸出。
c.不斷進行,直到全部輸入數據轉換完成。
d.如果最後剩下兩個輸入數據,在編碼結果後加1個「=」;
e.如果最後剩下一個輸入數據,編碼結果後加2個「=」;
f.如果沒有剩下任何數據,就什麼都不要加,這樣才可以保證資料還原的正確性。
二、HASH加密/單向散列函數
簡述:Hash演算法特別的地方在於它是一種單向演算法,用戶可以通過Hash演算法對目標信息生成一段特定長度(32個字元)的唯一的Hash值,卻不能通過這個Hash值重新獲得目標信息。對用相同數據,加密之後的密文相同。 常見的Hash演算法有MD5和SHA。由於加密結果固定,所以基本上原始的哈希加密已經不再安全,於是衍生出了加鹽的方式。加鹽:先對原始數據拼接固定的字元串再進行MD5加密。
特點:
1) 加密 後密文的長度是定長(32個字元的密文)的
2)如果明文不一樣,那麼散列後的結果一定不一樣
3)如果明文一樣,那麼加密後的密文一定一樣(對相同數據加密,加密後的密文一樣)
4)所有的加密演算法是公開的
5)不可以逆推反算(不能根據密文推算出明文),但是可以暴力 破解 ,碰撞監測
原理:MD5消息摘要演算法,屬Hash演算法一類。MD5演算法對輸入任意長度的消息進行運行,產生一個128位的消息摘要。
1)數據填充
對消息進行數據填充,使消息的長度對512取模得448,設消息長度為X,即滿足X mod 512=448。根據此公式得出需要填充的數據長度。
填充方法:在消息後面進行填充,填充第一位為1,其餘為0。
2)添加信息長度
在第一步結果之後再填充上原消息的長度,可用來進行的存儲長度為64位。如果消息長度大於264,則只使用其低64位的值,即(消息長度 對264取模)。
在此步驟進行完畢後,最終消息長度就是512的整數倍。
3)數據處理
准備需要用到的數據:
4個常數:A = 0x67452301, B = 0x0EFCDAB89, C = 0x98BADCFE, D = 0x10325476;
4個函數:F(X,Y,Z)=(X & Y) | ((~X) & Z);G(X,Y,Z)=(X & Z) | (Y & (~Z));H(X,Y,Z)=X ^ Y ^ Z;I(X,Y,Z)=Y ^ (X | (~Z));
把消息分以512位為一分組進行處理,每一個分組進行4輪變換,以上面所說4個常數為起始變數進行計算,重新輸出4個變數,以這4個變數再進行下一分組的運算,如果已經是最後一個分組,則這4個變數為最後的結果,即MD5值。
三、對稱加密
經典演算法:
1)DES數據加密標准
DES演算法的入口參數有三個:Key、Data、Mode。其中Key為8個位元組共64位,是DES演算法的工作密鑰;Data也為8個位元組64位,是要被加密或被解密的數據;Mode為DES的工作方式,有兩種:加密或解密。
DES演算法是這樣工作的:如Mode為加密,則用Key去把數據Data進行加密, 生成Data的密碼形式(64位)作為DES的輸出結果;如Mode為解密,則用Key去把密碼形式的數據Data解密,還原為Data的明碼形式(64位)作為DES的輸出結果。在通信網路的兩端,雙方約定一致的Key,在通信的源點用Key對核心數據進行DES加密,然後以密碼形式在公共通信網(如電話網)中傳輸到通信網路的終點,數據到達目的地後,用同樣的Key對密碼數據進行解密,便再現了明碼形式的核心數據。這樣,便保證了核心數據(如PIN、MAC等)在公共通信網中傳輸的安全性和可靠性。
2)3DES使用3個密鑰,對消息進行(密鑰1·加密)+(密鑰2·解密)+(密鑰3·加密)
3)AES高級加密標准
如圖,加密/解密使用相同的密碼,並且是可逆的
四、非對稱加密
特點:
1)使用公鑰加密,使用私鑰解密
2)公鑰是公開的,私鑰保密
3)加密處理安全,但是性能極差
經典演算法RSA:
1)RSA原理
(1)求N,准備兩個質數p和q,N = p x q
(2)求L,L是p-1和q-1的最小公倍數。L = lcm(p-1,q-1)
(3)求E,E和L的最大公約數為1(E和L互質)
(4)求D,E x D mode L = 1
五、數字簽名
原理以及應用場景:
1)數字簽名的應用場景
需要嚴格驗證發送方身份信息情況
2)數字簽名原理
(1)客戶端處理
對"消息"進行HASH得到"消息摘要"
發送方使用自己的私鑰對"消息摘要"加密(數字簽名)
把數字簽名附著在"報文"的末尾一起發送給接收方
(2)服務端處理
對"消息" HASH得到"報文摘要"
使用公鑰對"數字簽名"解密
對結果進行匹配
六、數字證書
簡單說明:
證書和駕照很相似,裡面記有姓名、組織、地址等個人信息,以及屬於此人的公鑰,並有認證機構施加數字簽名,只要看到公鑰證書,我們就可以知道認證機構認證該公鑰的確屬於此人。
數字證書的內容:
1)公鑰
2)認證機構的數字簽名
證書的生成步驟:
1)生成私鑰openssl genrsa -out private.pem 1024
2)創建證書請求openssl req -new -key private.pem -out rsacert.csr
3)生成證書並簽名,有效期10年openssl x509 -req -days 3650 -in rsacert.csr -signkey private.pem -out rsacert.crt
4)將PEM格式文件轉換成DER格式openssl x509 -outform der -in rsacert.crt -out rsacert.der
5)導出P12文件openssl pkcs12 -export -out p.p12 -inkey private.pem -in rsacert.crt
iOS開發中的注意點:
1)在iOS開發中,不能直接使用PEM格式的證書,因為其內部進行了Base64編碼,應該使用的是DER的證書,是二進制格式的;
2)OpenSSL默認生成的都是PEM格式的證書。
七、https
HTTPS和HTTP的區別:
超文本傳輸協議HTTP協議被用於在Web瀏覽器和網站伺服器之間傳遞信息。HTTP協議以明文方式發送內容,不提供任何方式的數據加密,如果攻擊者截取了Web瀏覽器和網站伺服器之間的傳輸報文,就可以直接讀懂其中的信息,因此HTTP協議不適合傳輸一些敏感信息,比如信用卡號、密碼等。
為了解決HTTP協議的這一缺陷,需要使用另一種協議:安全套接字層超文本傳輸協議HTTPS。為了數據傳輸的安全,HTTPS在HTTP的基礎上加入了SSL協議,SSL依靠證書來驗證伺服器的身份,並為瀏覽器和伺服器之間的通信加密。
HTTPS和HTTP的區別主要為以下四點:
1)https協議需要到ca申請證書,一般免費證書很少,需要交費。
2)http是 超文本傳輸協議 ,信息是明文傳輸,https則是具有 安全性 的 ssl 加密傳輸協議。
3)http和https使用的是完全不同的連接方式,用的埠也不一樣,前者是80,後者是443。
4)http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的 網路協議 ,比http協議安全。
5)SSL:Secure Sockets Layer安全套接字層;用數據加密(Encryption)技術,可確保數據在網路上傳輸過程中不會被截取及竊聽。目前一般通用之規格為40 bit之安全標准,美國則已推出128 bit之更高安全標准,但限制出境。只要3.0版本以上之I.E.或Netscape 瀏覽器 即可支持SSL。目前版本為3.0。SSL協議位於TCP/IP協議與各種應用層協議之間,為數據通訊提供安全支持。SSL協議可分為兩層:SSL記錄協議(SSL Record Protocol):它建立在可靠的傳輸協議(如TCP)之上,為高層協議提供數據封裝、壓縮、加密等基本功能的支持。SSL握手協議(SSL Handshake Protocol):它建立在SSL記錄協議之上,用於在實際的數據傳輸開始前,通訊雙方進行身份認證、協商加密演算法、交換加密密鑰等。
『拾』 HASH中的MD5
Hash,一般翻譯做"散列」,也有直接音譯為"哈希"的,就是把任意長度的輸入(又叫做預映射, pre-image),通過散列演算法,變換成固定長度的輸出,該輸出就是散列值。這種轉換是一種壓縮映射,也就是,散列值的空間通常遠小於輸入的空間,不同的輸入可能會散列成相同的輸出,而不可能從散列值來唯一的確定輸入值.
簡單的說就是一種將任意長度的消息壓縮到某一固定長度的信息摘要的函數.
HASH主要用於信息安全領域中加密演算法,他把一些不同長度的信息轉化成雜亂的128位的編碼里,叫做HASH值. 也可以說,hash就是找到一種數據內容和數據存放地址之間的映射關系.
Hash演算法在信息安全方面的應用主要體現在以下的3個方面:
如果將哈希後的密文比作一把鎖,暴力破解的方法就是現場製作各種各樣不同齒形的鑰匙,再來嘗試能否開鎖,這樣耗時無疑很長;我以前錯誤理解的「彩虹表」,是事先製作好所有齒形的鑰匙,全部拿過來嘗試開鎖,這樣雖然省去了製作鑰匙的時間,但是後來發現這些鑰匙實在是太多了,沒法全部帶在身上。而真正的彩虹表,是將鑰匙按照某種規律進行分組,每組鑰匙中只需要帶最有特點的一個,當發現某個「特徵鑰匙」差一點就能開鎖了,則當場對該鑰匙進行簡單的打磨,直到能開鎖為止。這種方法是既省力又省時的.
哈希碰撞就是一種優化過演算法,其基本原理就是把密碼明文對應的MD5與你的MD5進行對比,因為經過一些優化,所以無論是時間上,還是空間都很很快.其優化方法我也沒研究過,不過感興趣的可以查一下王小雲教授關於哈希碰撞的論文.
目前來說,破解MD5加密的最有效的方法就是 哈希碰撞+彩虹表+對應秘鑰 ,一些網路黑客會在一些明文存儲用戶密碼的網站上竊取信息,假如黑客有一億條數據,因為都是真實用戶所以經過哈希碰撞之後,你的密碼被破譯出來的幾率就真的非常大了,那破譯不出來的可能就是因為大小寫和一些特殊符號,這就用到了彩虹表,最後就是你的秘鑰,比如你是之前對用戶的密碼進行加鹽,還是之後對MD5之後的字元串進行的特殊處理,只要對方知道你的秘鑰,那麼你密碼被破譯出來的幾率就非常非常高了,所以我們說: 一個密碼系統的安全性只在於密鑰的保密性,而不在於演算法的保密性.
MD5本身是不可逆和無沖突的,但是用一些巧妙地方法會被破解出來.一個密碼系統的是沒有絕對安全的,密碼系統只是增加了被破解的代價.
PS:一切明文存儲用戶密碼的網站都是耍流氓!