上一篇文章整理了Base64算法的相關(guān)知識(shí),嚴(yán)格來(lái)說(shuō),Base64只能算是一種編碼方式而非加密算法,這一篇要說(shuō)的MD5,其實(shí)也不算是加密算法,而是一種哈希算法,即將目標(biāo)文本轉(zhuǎn)化為固定長(zhǎng)度,不可逆的字符串(消息摘要).

簡(jiǎn)單了解

MD5(Message Digest Algorithm 5),翻譯過(guò)來(lái)是消息摘要算法第五版,按照慣例,我們推理可能也有MD2,MD3這樣名字的歷史版本..

即使完全不了解這個(gè)算法的原理,我們也可以從命名中看出一些眉道,所謂摘要,就是一個(gè)簡(jiǎn)短的概括,像我寫(xiě)過(guò)的畢業(yè)論文,上來(lái)第一部分就是摘要,它對(duì)后面長(zhǎng)篇大論的文章做了一個(gè)簡(jiǎn)短有力的概括,其實(shí)MD5的作用也有點(diǎn)這樣的味道,我們來(lái)看一段關(guān)于描述MD5算法作用的文字:

MD5的作用是讓大容量信息在用數(shù)字簽名軟件簽署私人密匙前被"壓縮"成一種保密的格式(就是把一個(gè)任意長(zhǎng)度的字節(jié)串變換成一定長(zhǎng)的大整數(shù)),它主要用于確保數(shù)據(jù)傳輸?shù)耐暾院鸵恢滦?

假設(shè)A要給遠(yuǎn)方的B發(fā)送一個(gè)文本文件,有100萬(wàn)字,當(dāng)B收到文件的時(shí)候,該怎么知道這個(gè)文件在傳過(guò)來(lái)的途中有沒(méi)有被篡改呢,要是有人中途截?cái)嗖⒋鄹牧宋募?nèi)容那就不太妙了,這時(shí)候MD5就派上用場(chǎng)了,不管多大的文件,通過(guò)MD5加密之后都會(huì)得到一個(gè)定長(zhǎng)的字符串,一般是32位,這時(shí)候A先對(duì)文件用MD5加密一下,得到的一串密文順便也傳給B,當(dāng)B收到后文件,同樣對(duì)文件用MD5加密一下,看看得到的密文是否和A傳過(guò)來(lái)的一致,如果一致,說(shuō)明這個(gè)文件是安全的.這樣就確保了數(shù)據(jù)傳輸?shù)耐暾?

事實(shí)上,我們從網(wǎng)絡(luò)上下載文件的時(shí)候,有時(shí)候下載的文件后面都有一段MD5的密文,比如 MD5(e8027a87676ea48b3a3c9b0a4d8d87a0),作用和上面我舉得例子類(lèi)似(我覺(jué)得是這樣....).

MD5是一種公開(kāi)的不可逆的算法,意味著是沒(méi)有辦法直接破解密文得到源數(shù)據(jù)信息的,md5可以對(duì)一個(gè)對(duì)一個(gè)任意大小的文件進(jìn)行哈希運(yùn)算,得到一個(gè)唯一的32位字符串.

簡(jiǎn)單了解了MD5的功能,就可以直接看代碼了.

java代碼實(shí)現(xiàn)MD5