一旦提到加密算法,經(jīng)常有人會有這樣的疑問:MD5 到底算不算一種加密算法呢?
在回答這個問題之前,我們需要先弄清楚兩點:
什么是加密算法?
什么是 MD5?
1什么是加密算法?
數(shù)據(jù)加密的基本過程就是對原來為明文的文件或數(shù)據(jù)按某種算法進行處理,使其成為不可讀的一段代碼為“密文”,使其只能在輸入相應(yīng)的密鑰之后才能顯示出原容,通過這樣的途徑來達到保護數(shù)據(jù)不被非法人竊取、閱讀的目的。該過程的逆過程為解密,即將該編碼信息轉(zhuǎn)化為其原來數(shù)據(jù)的過程。
-- 來自《百度百科》
使用密碼學(xué)可以達到以下三個目的:
數(shù)據(jù)保密性:防止用戶的數(shù)據(jù)被竊取或泄露;
數(shù)據(jù)完整性:防止用戶傳輸?shù)臄?shù)據(jù)被篡改;
身份驗證:確保數(shù)據(jù)來源與合法的用戶。
加密算法分類
常見的加密算法大體可以分為兩大類:對稱加密和非對稱加密。
對稱加密
對稱加密算法就是用一個秘鑰進行加密和解密。
非對稱加密
與對稱加密算法不同的是,進行加密與解密使用的是不同的秘鑰,有一個公鑰-私鑰對,秘鑰正確才可以正常的進行加解密。
2什么是MD5?
MD5算法:MD5全稱Message Digest Algorithm 5,即消息摘要算法第5版。
MD5 以 512位分組來處理輸入的信息,且每一分組又被劃分為16個32位子分組,經(jīng)過了一系列的處理后,算法的輸出由四個32位分組組成,將這四個32位分組級聯(lián)后將生成一個128位散列值。
MD5算法的主要特點:
長度固定
MD5加密后值固定長度是128位,使用32個16進制數(shù)字進行表示。
單向性
如果告訴原始消息,算法是MD5,迭代次數(shù)=1的情況下,我們一樣可以得到一摸一樣的消息摘要,但是反過來卻不行。
不可逆
在不知道原始消息的前提下,是無法憑借16個字節(jié)的消息摘要(Message Digest),還原出原始的消息的。
下面這個消息摘要,你知道他的原始信息是什么嗎?
MessageDigest='454e2624461c206380f9f088b1e55fae'
其實,原始信息是以下長長的字符串:
93eyHv2Iw5kbn1dqfBw1BuTE29V2FJKicJSu8iEOpfoafwJISXmz1wnnWL3V/0Nx TulfWsXugOoLfv0ZIBP1xH9kmf22jjQ2JiHhQZP7ZDsreRrOeIQ/c4yR8IQvMLfC 0WKQqrHu5ZzXTH4NO3CwGWSlTY74kE91zXB5mwWAx1jig+UXYc2w4RkVhy0//lOm Vya/PEepuuTTI4+UJwC7qbVlh5zfhj8oTNUXgN0AOc+Q0/WFPl1aw5VV/VrO8FCo B15lFVlpKaQ1Yh+DVU8ke+rt9Th0BCHXe0uZOEmH0nOnH/0onD
恒定性
如果按照以上示例的原始信息,大家與我計算出來的消息摘要不一樣,那肯定你是使用了一個假的 MD5 工具,哈哈哈。
當(dāng)原始消息恒定時,每次運行MD5產(chǎn)生的消息摘要都是恒定不變的,無論是誰來計算,結(jié)果都應(yīng)該是一樣的。
不可預(yù)測性
讓我們再來嘗試一次,「不可逆」中應(yīng)用到的原始消息的最后一個字母'D',修改成'E',如下所示:
93eyHv2Iw5kbn1dqfBw1BuTE29V2FJKicJSu8iEOpfoafwJISXmz1wnnWL3V/0Nx TulfWsXugOoLfv0ZIBP1xH9kmf22jjQ2JiHhQZP7ZDsreRrOeIQ/c4yR8IQvMLfC 0WKQqrHu5ZzXTH4NO3CwGWSlTY74kE91zXB5mwWAx1jig+UXYc2w4RkVhy0//lOm Vya/PEepuuTTI4+UJwC7qbVlh5zfhj8oTNUXgN0AOc+Q0/WFPl1aw5VV/VrO8FCo B15lFVlpKaQ1Yh+DVU8ke+rt9Th0BCHXe0uZOEmH0nOnH/0onE
那經(jīng) MD5 后產(chǎn)生的消息摘要,是不是和 '454e2624461c206380f9f088b1e55fae' 很相似呢?
讓大家失望了,產(chǎn)生的消息摘要沒有一絲一毫的關(guān)聯(lián)性,新的消息摘要如下所示:
Message Digest = '8796ed5412b84ff5c4769d080b4a89a2'
聊到這里,突然想到一個有意思的問題:
MD5是32位的,理論上是有限的,而世界上的數(shù)據(jù)是無限的,那會不會生成重復(fù)的MD5值?
是不是也有同學(xué)產(chǎn)生相似的疑問呢?
理論上來講,當(dāng)然會生成重復(fù)的MD5值。
分享一個經(jīng)典的例子:
數(shù)據(jù)源1:
d131dd02c5e6eec4693d9a0698aff95c2fcab58712467eab4004583eb8fb7f89 55ad340609f4b30283e488832571415a085125e8f7cdc99fd91dbdf280373c5b d8823e3156348f5bae6dacd436c919c6dd53e2b487da03fd02396306d248cda0 e99f33420f577ee8ce54b67080a80d1ec69821bcb6a8839396f9652b6ff72a70
數(shù)據(jù)源2:
d131dd02c5e6eec4693d9a0698aff95c2fcab50712467eab4004583eb8fb7f89 55ad340609f4b30283e4888325f1415a085125e8f7cdc99fd91dbd7280373c5b d8823e3156348f5bae6dacd436c919c6dd53e23487da03fd02396306d248cda0 e99f33420f577ee8ce54b67080280d1ec69821bcb6a8839396f965ab6ff72a70
它們竟然有著共同的MD5值(? 注意看,數(shù)據(jù)源1、2是存在很多細節(jié)不同的):
79054025255fb1a26e4bc422aef54eb4
3MD5是加密算法嗎?
MD5計算,對原始消息(Message)做有損的壓縮計算,無論消息(輸入值)的長度字節(jié)是多少,是1億字節(jié)還是1個字節(jié),都會生成一個固定長度(128位/16字節(jié))的消息摘要(輸出值)。
也就是說,MD5 算法和加密算法都可以將信息轉(zhuǎn)換為另外一種內(nèi)容,但是,MD5 算法對比 加密算法 缺少了解密過程。
好比一頭山羊,被層層加工制作成一包包風(fēng)干羊肉,這個就是一次MD5操作。這種加工過程,勢必將羊身體N多部位有損失,故無法通過羊肉干再復(fù)原出一頭山羊...
使用加密算法加密后的消息是完整的,并且基于解密算法后,可以恢復(fù)原始數(shù)據(jù)。而MD5 算法得到的消息是不完整的,并且通過摘要的數(shù)據(jù)也無法得到原始數(shù)據(jù)。
所以嚴(yán)格意義上來講,MD5 稱為摘要/散列算法更合適,而不是加密算法!
那現(xiàn)實的問題來了,MD5究竟有什么用?
審核編輯:湯梓紅
-
md5
+關(guān)注
關(guān)注
0文章
29瀏覽量
21051 -
加密算法
+關(guān)注
關(guān)注
0文章
216瀏覽量
25774 -
數(shù)據(jù)加密
+關(guān)注
關(guān)注
0文章
54瀏覽量
12920
原文標(biāo)題:MD5到底算不算一種加密算法?
文章出處:【微信號:OSC開源社區(qū),微信公眾號:OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
如何對MD5加密算法優(yōu)化?
加密算法(DES,AES,RSA,MD5,SHA1,Base64)
用C語言實現(xiàn)MD5加密算法
【開源三方庫】crypto-js加密算法庫的使用方法
md5加密算法源代碼
一種基于MD5硬件Key的票據(jù)號產(chǎn)生方法
MD5加密算法改進及其特征碼在殺毒軟件中的應(yīng)用
md5算法原理與實現(xiàn)

md5算法可逆嗎_MD5值是什么
md5是什么_md5怎么用
開源物聯(lián)網(wǎng)技術(shù)--哈希算法MD5加密功能技術(shù)分享

評論