256.Spring Boot+Spring Security: MD5是加密算法嗎?

說明css

(1)JDK版本:1.8python

(2)Spring Boot 2.0.6算法

(3)Spring Security 5.0.9數據庫

(4)Spring Data JPA 2.0.11.RELEASE安全

(5)hibernate5.2.17.Finalsession

(6)MySQLDriver 5.1.47併發

(7)MySQL 8.0.12函數

 

前言編碼

   有網友在公衆號留言:準確的說md5是摘要算法不是加密算法加密

       針對這個問題,當時也沒有仔細的思考,空下來的時候,對於這個問題整理了下思路。

 

1、加密算法

1.1 加密和解密

1.1.1 加密

數據加密 的基本過程,就是對原來爲明文 的文件或數據按 某種算法 進行處理,使其成爲不可讀 的一段代碼,一般稱爲「密文」。經過這樣的途徑,來達到 保護數據 不被 非法人竊取、閱讀的目的。

1.1.2 解密

加密 的 逆過程 爲解密,即將該 編碼信息 轉化爲其 原來數據 的過程

1.2對稱加密和非對稱加密

加密算法分 對稱加密 和 非對稱加密,其中對稱加密算法的加密與解密密鑰相同非對稱加密算法的加密密鑰與解密 密鑰不一樣

常見的 對稱加密 算法主要有 DES3DESAES 等,常見的 非對稱算法 主要有 RSADSA 等

 

1.2.1 對稱加密算法

對稱加密算法 是應用較早的加密算法,又稱爲共享密鑰加密算法。在 對稱加密算法 中,使用的密鑰只有一個,發送 和 接收 雙方都使用這個密鑰對數據進行 加密 和 解密。這就要求加密和解密方事先都必須知道加密的密鑰。

分析:

(1)數據加密過程:在對稱加密算法中,數據發送方 將 明文 (原始數據) 和 加密密鑰 一塊兒通過特殊 加密處理,生成複雜的 加密密文進行發送。

(2)數據解密過程:數據接收方 收到密文後,若想讀取原數據,則須要使用 加密使用的密鑰及相同算法的 逆算法 對加密的密文進行解密,才能使其恢復成 可讀明文。

 

1.2.2 非對稱加密算法

非對稱加密算法,又稱爲公開密鑰加密算法。它須要兩個密鑰,一個稱爲公開密鑰 (public key),即 公鑰,另外一個稱爲 私有密鑰(private key),即 私鑰。

由於 加密 和 解密使用的是兩個不一樣的密鑰,因此這種算法稱爲 非對稱加密算法。

 

(1)若是使用 公鑰對數據 進行加密,只有用對應的 私鑰 才能 進行解密。

(2)若是使用 私鑰對數據 進行加密,只有用對應的 公鑰 才能 進行解密。

 

2、摘要算法

什麼是摘要算法呢?摘要算法又稱哈希算法散列算法。它經過一個函數,把任意長度的數據轉換爲一個長度固定的數據串(一般用16進制的字符串表示)。

舉個例子,你寫了一篇文章,內容是一個字符串'how to use pythonhashlib - by Michael',並附上這篇文章的摘要是'2d73d4f15c0db7f5ecb321b6a65e5d6d'。若是有人篡改了你的文章,並發表爲'how to usepython hashlib - by Bob',你能夠一會兒指出Bob篡改了你的文章,由於根據'how to usepython hashlib - by Bob'計算出的摘要不一樣於原始文章的摘要。

可見,摘要算法就是經過摘要函數f()對任意長度的數據data計算出固定長度的摘要digest,目的是爲了發現原始數據是否被人篡改過

摘要算法之因此能指出數據是否被篡改過,就是由於摘要函數是一個單向函數,計算f(data)很容易,但經過digest反推data卻很是困難。並且,對原始數據作一個bit的修改,都會致使計算出的摘要徹底不一樣。

摘要算法 主要有 SHA-1MD5 等。

 

2.1 MD5是加密嗎?

       MD5嚴格意義上來說,不是加密算法,而是摘要算法/散列算法,或者叫作哈希算法。

加密算法的目的,在於別人沒法成功查看加密後的數據,而且在須要的時候還能夠對數據進行解密來從新查看數據。而 MD5 算法是一種哈希算法,哈希算法的設計目標自己就決定了,它在大多數時候都是不可逆的,即你通過哈希算法得出的數據,沒法再通過任何算法還原回去。因此,既然不能將數據還原,也就不能稱之爲能夠解密;既然不能解密,那麼哈希的過程天然也就不能稱做是「加密」了。

 

簡單理解:

加密後的消息是完整的;具備解密算法,獲得原始數據;

摘要獲得的消息是不完整的;經過摘要的數據,不能獲得原始數據。

 

2.2 MD5算法是如何被破解的?

2.2.1 何謂破解?

有不少種方法能夠破解,不過須要明確一點,這裏所謂的破解,並不是把摘要還原成原文。爲何呢?由於固定128位的摘要是有窮的,而原文數量是無窮的,每個摘要均可以由若干個原文經過Hash獲得。

       對於MD5的破解,實際上都屬於【碰撞】。好比原文A經過MD5能夠生成摘要M,咱們並不須要把X還原成A,只須要找到原文B,生成一樣的摘要M便可。

2.2.2 破解之法

MD5碰撞的方法有不少,主要包括暴力枚舉法、字典法、彩虹表法等等。

暴力枚舉法:顧名思義,就是簡單粗暴地枚舉出全部原文,並計算出它們的哈希值,看看哪一個哈希值和給定的信息摘要一致。這種方法雖然簡單,可是時間複雜度極高。

       字典發:利用一個巨大的字典,存儲儘量多的原文和對應的哈希值。每次用給定的信息摘要查找字典,便可快速找到碰撞的結果。這樣作雖然每次破解速度很快,可是生成字典須要巨大的空間,大約須要4.65PB的存儲空間

       對於彩虹表法這個理解起來就比較複雜了,有興趣的小夥伴能夠找資料瞭解下。

 

2.3 md5是惟一的嗎?

md5做爲數據庫中的主鍵可行嗎?這就涉及到一個問題,md5值是惟一的嗎?答案是,不惟一。也就是一個原始數據,只對應一個md5值;可是一個md5值,可能對應多個原始數據

 

參考資料:

MD5算法如何被破解

https://blog.csdn.net/wufaliang003/article/details/79794982

淺談常見的七種加密算法及實現

https://blog.csdn.net/baidu_22254181/article/details/82594072

摘要算法簡介

https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/0013868328251266d86585fc9514536a638f06b41908d44000

MD5 加密算法詳細介紹

https://blog.csdn.net/ling_du/article/details/51452091

MD5 究竟是不是加密?

https://blog.csdn.net/lspq35k7o5aj21l1h9o/article/details/81073726

歷史文章

214. Spring Security:概述

215.Spring Boot+Spring Security:初體驗

216.Spring Boot+Spring Security:基於內存的認證信息

217.Spring Boot+Spring Security:基於內存的角色受權

218.Spring Boot+Spring Security:基於內存數據庫的身份認證和角色受權

219.Spring Boot+Spring Security:基於MySQL數據庫的身份認證和角色受權

220.Spring Boot+Spring Security:自定義登陸頁面和構建主頁

221.Spring Boot+Spring Security:登出和403處理

222.Spring Boot+Spring Security:動態加載角色

223.Spring Boot+Spring Security:原理1

224.Spring Boot+Spring Security:自定義Filter

246.Spring Boot+Spring Security:頁面白名單和獲取登陸信息

13. Spring Boot+Spring Security:基於URL動態權限n種方案

248.Spring Boot+Spring Security:基於URL動態權限:準備工做 

249.Spring Boot+Spring Security:基於URL動態權限:擴展access()的SpEL表達式

250.Spring Boot+Spring Security:基於URL動態權限:自定義AccssDesionManager

251.Spring Boot+Spring Security:基於URL動態權限:自定義Filter

252.Spring Boot+Spring Security:標籤sec:authorize的使用

253.Spring Boot+Spring Security:獲取用戶信息和session併發控制

254.Security註解:@PreAuthorize,@PostAuthorize, @Secured, EL實現方法安全

255.Spring Boot+Spring Security:使用md5加密

我就是我,是顏色不同的煙火。
我就是我,是不同凡響的小蘋果。

à悟空學院:http://t.cn/Rg3fKJD

學院中有Spring Boot相關的課程!點擊「閱讀原文」進行查看!

SpringBoot視頻:http://t.cn/R3QepWG

Spring Cloud視頻:http://t.cn/R3QeRZc

SpringBoot Shiro視頻:http://t.cn/R3QDMbh

SpringBoot交流平臺:http://t.cn/R3QDhU0

SpringData和JPA視頻:http://t.cn/R1pSojf

SpringSecurity5.0視頻:http://t.cn/EwlLjHh

Sharding-JDBC分庫分表實戰:http://t.cn/E4lpD6e

相關文章
相關標籤/搜索