加密算法極先鋒之MD5算法

2020-12-14 計算機java編程

在開發過程中,避免不了要涉及到數據加密,比如用戶帳號密碼的加密,用戶敏感數據的加密,涉及到的加密算法種類繁多,作為拿來主義的開發者時間精力有限,能夠清楚其中主流的加密算法和用途,就已經足夠了。

主要的數據加密算法主要有:md5、sha、aes、des、rsa、base64等等。

先來看看我們的老熟人:md5算法,幾乎在任何一個系統中,都少不了他的身影。MD5算法全稱叫MessageDigestAlgorithm5(信息摘要算法5),是數字摘要算法的一種實現,摘要長度為128位。由於其算法的複雜性和不可逆性,主要用於確保信息傳輸完整性和一致性。他還有早期的「不太爭氣」的幾代MD2、MD3、MD4(早期的幾代就是由於複雜度不夠被破解了)。正是由於MD5算法有如此特性,在業界應用非常廣泛,主流的程式語言都自帶有MD5的實現。

最常見的,很多系統中的用戶密碼都採用了MD5加密算法進行加密。但是樹大必然招風,就像windows系統應用廣泛了,安全性就收到了挑戰,MD5也不例外。度娘一下就會發現,有諸多網站提供MD5破解,有的甚至需要收費提供破解服務。

不過不用擔心,目前能破解MD5並還原出原始數據的成功率很低(當然像123456這種弱智的原文,就不要提了,其他的破解可以自行度娘試試)。這就需要提到現行MD5算法的主要破解思路,其實核心只有一個,那就是暴力碰撞(其他還有兩種 字典法、彩虹表法都是暴力碰撞法的改良,原理一樣),說白了就是用已知的字符進行各種變態組合,生成眾多的密文與原文的對應庫,然後反向根據密文,找到對應的明文。

比如,你的明文數據是abcd1234(當然實際不應該這麼簡單,這裡只是舉例),加密出來的密文是e19d5cd5af0378da05f63f891c7467af,那麼不安好心的人就會用密文e19d5cd5af0378da05f63f891c7467af去提供這種破解的工具或者服務那裡,查詢這個密文有沒有對應明文,如果有,就代表破解成功了,然後他就拿這個「破解」得到的明文去登錄你的帳號,結果可想而知。

成功進入了你的領地,但這個成功,是不完美的。因為md5的不可逆性,大多數帳號登陸過程,只能拿用戶輸入的原文加密成MD5密文後去跟資料庫裡的密文比較,相同則認定密碼正確。

但這也有漏網之魚,因為即使破解出來的結果不是上面說到的abcd1234而是xxxxx,也有可能用xxxx成功登錄系統。

因為MD5雖然不可逆,但不是唯一性。這裡所謂的破解,並非把摘要還原成原文。為什麼呢?因為固定128位的摘要(也就是加密後的密文)是有窮的,而原文數量是無窮的,每一個摘要都可以由若干個原文通過Hash得到。換句人話說,就是不同的原文可能加密後得到相同的密文。那麼拿密文猜測原文就會得到多個結果,單純比較密文,就會被認為是一致的。而反過來,也是同理。拿到不一定對的還原出來的明文去做其他操作,也不一定能成功。

總結一下,MD5加密算法之所以破解成功的概率很低,主要由於以下幾點:

1)依賴暴力碰撞的破解思路,意味著需要儘可能多的組合所有字符,形成海量的配對庫,用於通過密文反向查詢明文,但字符種類千千萬萬,所有都進行組合,可能性都超過地球的細胞總數了,估計現在所有硬碟加在一起的空間都存不下,成本之高,可想而知。

2)目前能破解的都屬於已經被組合猜測過的,一般也都是長度較短的或者比較有規律的組合。只要長度越長越沒有規律,不同類型字符組合越多,破解概率越低,幾乎不會成功。

3)就算密文對了,原始明文也不一定對,當然這是最後一道防線,聽天由命了。

另外,MD5的用途,目前主流的無非兩種,一種是用於類似用戶密碼等不需要還原的敏感數據的加密,一種是用於確保信息傳輸完整性和一致性。其實,第二種用途才是他誕生的初衷。

這裡簡單提一下第二種用途。很多支付接口、數據交互接口,都採用基於MD5來確保數據的完整性和一致性,也就是在網絡傳輸過程中沒有被篡改。如何保證數據不被篡改,僅僅依靠MD5做不到,還需要聯手其他加密算法,具體請後續再談。

相關焦點

  • CSharp如何運用MD5算法加密密碼?
    MD5(Message-Digest Algorithm 5)是一種廣泛使用的「消息-摘要算法」。這是一個單項散列函數,數據經過單向散列函數獲取一個固定長度的散列值,資料庫的籤名就是計算資料庫的散列值,MD5算法的散列值為128位。
  • 小叮噹Python進階(二):爬蟲與加密算法Part2之MD5
    MD5MD5全稱為message-digest algorithm 5(信息-摘要算法)。我們經常說的「MD5加密」,指的就是它---信息-摘要算法。MD5加密算法強大到,一個字符串,或文件,或壓縮包,執行MD5後,就可以生成一個固定長度為128bit的編碼串。
  • Java加密與解密之消息摘要算法1
    我們一般通過這類算法來加密我們的密碼,比如用戶在我們的web頁面註冊後,我們會把用戶設置的密碼通過md5或者sha來加密。".getBytes() ; String md5 = hex(encodeMD5(source)) ; System.out.println(md5) ; }}代碼很簡單其實就是兩步就完成了。
  • MD5加密方式
    什麼是MD5MD5加密全程是Message-Digest Algoorithm 5(信息-摘要算法),它對信息進行摘要採集,再通過一定的位運算,最終獲取加密後的MD5字符串。例如我們要加密一篇文章,那麼我們會隨機從每段話或者每行中獲取一個字,把這些字統計出來後,再通過一定的運算獲得一個固定長度的MD5加密後信息。因此,其很難被逆向破解。 實質上,MD5 只是一種哈希算法。MD5有哪些特點1、針對不同長度待加密的數據、字符串等等,其都可以返回一個固定長度的MD5加密字符串。
  • Java安全之安全加密算法
    了解的層次只是基於加密算法的一些應用上。也來淺談一下加密算法在安全領域中的作用。寫本篇文也是基於算法的應用和實現,也是我的基本原則,能用就行。MD5md5的運用範圍也比較廣,比如在一些資料庫存儲密碼的時候會去使用到該算法去進行加密存儲。當然也可以看到網上的一些md5破解的。但是他們都是基於彩虹表去跑,使用字典進行md5加密,然後把加密的值進行對比,從而判斷該md5值的明文。
  • JAVA上加密算法的實現用例
    數據加密的基本過程就是對原來為明文的文件或數據按某種算法進行處理,使其成為不可讀的一段代碼為「密文」,使其只能在輸入相應的密鑰之後才能顯示出原容,通過這樣的途徑來達到保護數據不被非法人竊取、閱讀的目的。通過修改文件的md5值,可以繞過某些網盤的&34;,這是因為網盤伺服器內存儲著已知違規文件的md5值,當上傳文件時會自動與伺服器md5資料庫匹配以判斷是否違規。
  • MD5算法加密的過程
    什麼是 MD5MD5 是一種算法, MD5 中的 MD 代表 Message Digest, 也即信息摘要.至於數字 5, 則因它是從更早的 MD4 算法改進而來, 因此得名 MD5.所以 MD5 即是信息摘要算法第五版.什麼是信息摘要算法那什麼又是信息摘要算法呢? 它本質上就是一個哈希函數(hash function).
  • Go 加密解密算法總結
    對稱式:對稱加密(也叫私鑰加密)指加密和解密使用相同密鑰的加密算法。具體算法主要有DES算法,3DES算法,TDEA算法,Blowfish算法,RC5算法,IDEA算法。非對稱加密(公鑰加密):指加密和解密使用不同密鑰的加密算法,也稱為公私鑰加密。具體算法主要有RSA、Elgamal、背包算法、Rabin、D-H、ECC(橢圓曲線加密算法)。數字籤名:數字籤名是非對稱密鑰加密技術與數字摘要技術的應用。
  • 超棒的MD5加密工具
    MD5是一種不可逆的加密算法,全稱是Message-Digest Algorithm 5(信息-摘要算法)。是當前計算機領域用於確保信息傳輸完整一致而廣泛使用的散列算法之一。MD5的典型應用是對一段信息(Message)產生信息摘要(Message-Digest),以防止被篡改。
  • C Sharp程式語言如何實現MD5加密的一個實例分享
    是加密算法嗎?不是的,md5是一種信息摘要算法,它可以從一個字符串或一個文件中按照一定的規則生成一個特殊的字符串,這個特殊的字符串就被稱之為摘要,我理解就是從文件中摘一些信息片段加工而來,並且一個文件所對應的MD5摘要是固定的,當文件內容變化後,其MD5值也會不一樣,雖然理論上來說也有可能會一樣,但概率極小,因此,在應用中經常使用MD5值來驗證一段數據有沒有被篡改。
  • JAVA實現消息摘要算法加密
    二、MD算法2.1、JDK實現MD算法1.使用JDK的MessageDigest類,使用該類的getInstance靜態方法來獲取一個MessageDigest實例,方法參數是算法名稱。2.使用MessageDigest的digest(byte[] b)方法,把指定內容通過MD5進行加密,返回字節數組類型。
  • Java加密與解密:消息摘要算法MD5
    簡述MD5算法是典型的消息摘要算法,其前身有MD2、MD3和MD4算法,它由MD4、MD3和MD2算法改進而來。不論是哪一種MD算法,它們都需要獲得一個隨機長度的信息並產生一個123位的信息摘要。如果將這個128位的二進位摘要信息換算成十六進位,可以得到一個32位的字符串,故我們見到的大部分MD5算法的數字指紋都是32為十六進位的字符串。
  • Javaweb之Filter案例練習-自動登錄問題和MD5加密
    MD5加密第一個要知道的是MD5(Message-Digest Algoorithm 5)是一種不可逆的加密算法。也就是只能加密,不能解密操作。那麼我們登錄是如何做到呢,一般來說資料庫中用戶名密碼肯定採用MD5加密。在後臺拿到前端獲取密碼,然後把這個密碼通過MD5加密,然後傳入資料庫和密碼這欄比較,相等就說明密碼一樣。
  • ASP.NET中MD5與SHA1加密的幾種方法
    所以你很難從加密後的文字中找到蛛絲馬跡。SHA1的全稱是Secure Hash Algorithm(安全哈希算法)MD5 算法的哈希值大小為128位。而SHA1 算法的哈希值大小為160位。兩種算法都是不可逆。
  • MD5算法原理
    導讀:本文主要介紹的是MD5算法的原理,感興趣的親們快來看一下吧~~~很漲姿勢的哦~~~本文引用地址:http://www.eepw.com.cn/article/275283.htm  MD5的全稱為Message-Digest Algorithm
  • 淺談MD5加密算法,頭條官方工程師就是依此內容查重(小白勿進)
    因此, 整個過程是不可逆的運算;正因為這個原因, 要想解密MD5加密算法, 行之有效的只有窮舉法, 也就是將可能出現的明文, 利用MD5算法進行重新的散列之後, 把得到的散列值和原始的數據相應的形成一對一的映射表, 然後比較在表中破解密碼的MD5算法散列值, 通過匹配從映射表中找出破解密碼所對應的原始明文。它的加密過程如圖所示。
  • asp.net中的MD5加密,無碰撞不可逆,加保險更安全
    MD5將任意長度的「字節串」變換成一個128bit的大整數,並且它是一個不可逆的字符串變換算法。換句話說就是,即使你看到源程序和算法描述,也無法將一個MD5的值變換回原始的字符串,從數學原理上說,是因為原始的字符串有無窮多個,這有點象不存在反函數的數學函數。MD5簡單來說就是把一段明文通過某種算法某個公式進行運算得出密文的一個過程。
  • 理解數字籤名、加密通信的關鍵:哈希算法
    哈希算法的分類  下一步我們把哈希函數分類,更細緻的聊聊哈希算法的特點。首先說哈希算法有很多種,例如 md5 ,SHA256 等等,但是它們總體上可以分為兩大類,一類是普通哈希,另外一類是加密哈希,cryptographic hash function 。  業界可以找到的哈希算法是有很多種的。
  • 安卓逆向之RSA加密算法
    今天小編要和大家一起學習RSA加密算法,有很多朋友問小編RSA算法咋搞,小編也很無奈,因為小編也正要去學習,剛好昨天老師講到了RSA加密算法,今天小編就分享出來,咱們一起去學習學習。RSA是最流行的非對稱加密算法之一,也被稱之為公鑰加密。
  • 網絡安全 | MD5信息摘要算法
    MD5信息摘要算法(英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼散列函數,也稱為哈希算法或者雜湊算法,可以產生出一個128位(16位元組)的散列值(hash value),用於確保信息傳輸完整一致。