偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

MD5現(xiàn)在還有人用么?

安全 應(yīng)用安全
實際上,MD5由美國密碼學(xué)家羅納德·李維斯特(Ronald Linn Rivest)設(shè)計,于1992年公開,用以取代MD4算法。

說到密碼學(xué),阿粉現(xiàn)在真的是非常的頭大,為啥呢?因為密碼學(xué)真的是有點難度呀,各種各樣的加密手段,各種各樣的解密手段,像 MD5 呀,還有 RSA 呀,還有 DES 呀,反正就是一大堆,接下來的幾天,阿粉就來逐個的分析一下這個關(guān)于密碼中的各種加密手段,以及他們是如何使用的。

MD5 的前世今生

實際上,MD5由美國密碼學(xué)家羅納德·李維斯特(Ronald Linn Rivest)設(shè)計,于1992年公開,用以取代MD4算法。

也就是說,在他之前,還有 MD4 算法,而 MD4 是麻省理工學(xué)院教授Ronald Rivest于1990年設(shè)計的一種信息摘要算法。它是一種用來測試信息完整性的密碼散列函數(shù)的實行。其摘要長度為128位,一般128位長的MD4散列被表示為32位的十六進(jìn)制數(shù)字。

當(dāng)時設(shè)計出來 MD4之后,就出現(xiàn)了兩個不服氣的人,非要證明這個玩意是不對的,關(guān)鍵是,這兩個人還真的成功了,一個是Den boer 另外一個Bosselaers 這兩個大哥,伙同一撥人,還真的找到了 MD4 的漏洞,找到MD4完整版本中的沖突(這個沖突實際上是一種漏洞,它將導(dǎo)致對不同的內(nèi)容進(jìn)行加密卻可能得到相同的加密后結(jié)果)。毫無疑問,MD4就此被淘汰掉了。

而李維斯特肯定也不服氣呀,于是在1992年的時候,李維斯特向互聯(lián)網(wǎng)工程任務(wù)組(IETF)提交了一份重要文件,描述了 MD5 這種算法的原理。由于這種算法的公開性和安全性,在90年代被廣泛使用在各種程序語言中,用以確保資料傳遞無誤等。

而之后,這個 MD5 可謂是影響深遠(yuǎn),當(dāng)時據(jù)說 Den boer 另外一個Bosselaers 這兩個大哥 又開始挑刺,發(fā)現(xiàn)了MD5算法中的假沖突(pseudo-collisions),但除此之外就沒有其他被發(fā)現(xiàn)的加密后結(jié)果了。所以也就沒有后續(xù)內(nèi)容了,于是在之后的時間里,MD5 就開始被大眾廣泛認(rèn)知了,一直持續(xù)了四五年的時間。

在 1996年后該算法被證實存在弱點,可以被加以破解,對于需要高度安全性的數(shù)據(jù),專家一般建議改用其他算法,如 SHA-2。

2004年,證實MD5算法無法防止碰撞(collision),因此不適用于安全性認(rèn)證,如SSL公開密鑰認(rèn)證或是數(shù)字簽名等用途。

所以,在之后,MD5 陸陸續(xù)續(xù)的退出歷史舞臺,雖然退出了歷史舞臺,但是,影響還是在的,至今也有 MD5 加密方式的存在,不信大家可以巴拉一下自己的項目,看看有沒有關(guān)于這個 MD5 的代碼存在呢?

什么是MD5

MD5碼是以512位分組來處理輸入的信息,且每一分組又被劃分為16個32位子分組,經(jīng)過了一系列的處理后,算法的輸出由四個32位分組組成,將這四個32位分組級聯(lián)后將生成一個128位散列值。

大家看一下百度百科上面給出的流程圖

圖片

其實總的來說,MD5 就是對一個不變的數(shù)據(jù)進(jìn)行加密,而加密之后的字符串也是不變的,只要對元數(shù)據(jù)哪怕做一個簡單的字符修改,那么通過 MD5 加密之后的密碼數(shù)據(jù),都會對應(yīng)的做出改變,就相當(dāng)于是一個人的 "指紋"。

Java實現(xiàn) MD5 那真的是太簡單了,實例代碼如下:

public class MD5 {
/**
* @param text明文
* @param key密鑰
* @return 密文
*/
// 帶秘鑰加密
public static String md5(String text, String key) throws Exception {
// 加密后的字符串
String md5str = DigestUtils.md5Hex(text + key);
System.out.println("MD5加密后的字符串為:" + md5str);
return md5str;
}

// 不帶秘鑰加密
public static String md52(String text) throws Exception {
// 加密后的字符串
String md5str = DigestUtils.md5Hex(text);
System.out.println("MD52加密后的字符串為:" + md5str + "\t長度:" + md5str.length());
return md5str;
}

/**
* MD5驗證方法
*
* @param text明文
* @param key密鑰
* @param md5密文
*/
// 根據(jù)傳入的密鑰進(jìn)行驗證
public static boolean verify(String text, String key, String md5) throws Exception {
String md5str = md5(text, key);
if (md5str.equalsIgnoreCase(md5)) {
System.out.println("MD5驗證通過");
return true;
}
return false;
}
}

MD5 為什么被棄用了

既然我們上面都說了 MD5 算是比較強(qiáng)大的了,為什么現(xiàn)在 MD5 會被大家棄用了呢?

一條信息的安全性取決于任何信息摘要函數(shù)的目標(biāo)是產(chǎn)生看起來是隨機(jī)的摘要。要被認(rèn)為是加密安全的,哈希函數(shù)應(yīng)該滿足兩個要求:

1,攻擊者不可能生成一個與特定的哈希值相匹配的信息。

2,攻擊者不可能創(chuàng)建兩個產(chǎn)生相同哈希值的消息。

根據(jù)IETF,MD5哈希值不再被認(rèn)為是加密安全的方法,不應(yīng)該被用于加密認(rèn)證。

2011年,IETF發(fā)布了RFC6151——MD5消息摘要和HMAC-MD5算法的最新安全考慮,其中引用了一些最近針對MD5哈希值的攻擊。它提到了一個在標(biāo)準(zhǔn)筆記本上一分鐘或更短的時間內(nèi)產(chǎn)生哈希碰撞的攻擊,以及另一個在2.6千兆赫的奔騰4系統(tǒng)上僅用10秒就能產(chǎn)生碰撞的攻擊。因此,IETF建議,新的協(xié)議設(shè)計根本不應(yīng)該使用MD5,最近針對該算法的研究抨擊到:在需要抗碰撞的應(yīng)用中取消MD5的使用,如數(shù)字簽名。

這樣,就導(dǎo)致了當(dāng)信息哈希代碼無意中被重復(fù)時,它有可能造成信息碰撞。MD5的哈希代碼串也被限制在128位。這使得它們比后來的其他哈希碼算法更容易被破解。

所以,當(dāng)人們發(fā)現(xiàn)這個算法不太合適的時候,就開始棄用了這個算法,慢慢的就衍生出了其他的相對于MD5 更加安全的算法了。

而當(dāng)時驗證最早的卻不是2011年,而是2004年通過我國的王曉云教授等學(xué)者的工作,md5已經(jīng)被證明可以進(jìn)行碰撞攻擊。也就是說,攻擊者可以產(chǎn)生兩個應(yīng)用程序,內(nèi)容不一樣,但是哈希值完全一樣。這就導(dǎo)致了在大家的眼中,MD5 已經(jīng)算是不夠安全的數(shù)據(jù)了,所以,MD5 就逐漸的被大家所淘汰,使用的情況也就不是那么多了。

為什么說MD5是不可逆的?

我們就簡單的用A乘以B,一定會得到一個固定的結(jié)果C。

比如說A(188923010)和B(172389945)

但是如果只是給你一個結(jié)果C,你知道C是由那幾個因式計算出來的結(jié)果嗎?

我相信你也猜不出來。所以, 只能從一個方向推導(dǎo)結(jié)果,不能從結(jié)果反過來逆向推導(dǎo),就叫單向函數(shù)不可逆, 即Md5算法不可逆。

更不用說,通過MD5的復(fù)雜算法來進(jìn)行計算以后得到的固定長度值了。

但是也有很多人說的比較官方,就像百度上的一些大哥生活的:

MD5不可逆的原因是由于它是一種散列函數(shù)(也叫哈希函數(shù),哈希函數(shù)又稱散列函數(shù),雜湊函數(shù),他是一個單向密碼體制,即從明文到密文的不可逆映射,只有加密過程沒有解密過程,哈希函數(shù)可以將任意長度的輸入經(jīng)過變化后得到固定長度的輸出,這個固定長度的輸出稱為原消息的散列或消息映射。理想的哈希函數(shù)可以針對不同的輸入得到不同的輸出,如果存在兩個不同的消息得到了相同的哈希值,那我們稱這是一個碰撞),使用的是hash算法,在計算過程中原文的部分信息是丟失了的。一個MD5理論上是可以對應(yīng)多個原文的,因為MD5是有限多個而原文是無限多個的。

這么說的話,感覺如果面試官問到的話,肯定回答的不是很好,反而不如先總結(jié)一下,然后再說出自己的理解。

關(guān)于MD5 你了解了么?

責(zé)任編輯:武曉燕 來源: Java極客技術(shù)
相關(guān)推薦

2016-12-15 09:26:53

MD5加密

2021-07-27 05:49:59

MySQL數(shù)據(jù)庫中間件

2022-01-04 21:45:43

蘋果6安卓手機(jī)

2016-12-20 08:11:26

地圖Here科技早新聞

2021-05-25 10:05:39

Python模擬導(dǎo)彈代碼

2018-03-13 14:21:07

2022-10-18 22:21:51

2021-10-06 15:52:20

5G運(yùn)營商基站

2021-11-12 14:17:36

AI 6G人工智能

2015-03-23 11:21:08

2009-06-06 18:57:47

MD5加密類Java Bean

2020-10-15 08:20:52

MD5算法加密的過程

2020-05-28 11:00:40

Flutter代碼框架

2021-12-06 18:16:14

SQLCRCMD5

2010-01-06 09:54:30

.NET Framew

2020-02-25 16:30:36

MD5是不是加密

2009-06-30 10:05:24

MD5加密JSP源碼

2021-02-04 13:32:55

jsp技術(shù)servlet

2022-01-04 09:24:32

Python Excel 表格

2021-06-07 10:00:41

MD5算法加密
點贊
收藏

51CTO技術(shù)棧公眾號