MD5介紹
md5介紹
1. md5簡介
md5的全稱是md5資訊摘要演算法(英文:MD5 Message-Digest Algorithm ),一種被廣泛使用的密碼雜湊函式,可以產生一個128位(16位元組,1位元組8位)的雜湊值(常見的是用32位的16進製表示,比如:0caa3b23b8da53f9e4e041d95dc8fa2c),用於確保資訊傳輸的完整一致。
2. md5原理
md5將整個檔案當做一個大文字資訊,通過不可逆的字串變換演算法,產生一個唯一的MD5資訊摘要。檔案的md5類似於人的指紋,在世界上是獨立無二的,如果任何人對檔案做了任何改動,其md5的值也就是對應的“數字指紋”都會發生變化。
對MD5演算法簡要的敘述可以為:MD5以512位分組來處理輸入的資訊,且每一分組又被劃分為16個32位子分組,經過了一系列的處理後,演算法的輸出由四個32位分組組成,將這四個32位分組級聯後將生成一個128位雜湊值。
md5與對稱和非對稱加密演算法不同,這兩種密碼是防止資訊被竊取,而摘要演算法的目標是用於證明原文的完整性。
3. md5特性
1. 不可逆
沒有系統有辦法知道md5原來的文字是什麼。
2. 具有高度的離散性
md5碼具有高度的雜湊性,沒有規律可循,哪怕原資訊只有一點點的變化,比如多個空格,那麼就會導致md5發生巨大變化,也可以說產生的md5碼是不可預測的。
3. 壓縮性
任意長度的資料,算出的md5值得長度都是固定的。
4. 弱碰撞性
已知原資料和其md5的值,想找到一個具有相同md5值得資料(即偽造資料)是非常困難的。
4. md5的用途
- 密碼的加密儲存,使用者設定密碼時,服務端只記錄這個密碼的MD5,而不記錄密碼本身,以後驗證使用者身份時,只需要將使用者輸入的密碼再次做一下MD5後,與記錄的MD5作一個比較即可驗證其密碼的合法性。
- 數字簽名,比如釋出一個程式,為了防止別人在你的程式裡插入病毒或木馬,你可以在釋出這個程式的同時,公開這個程式檔案的MD5碼,這樣別人只需要在任何地方下載這個程式後做一次MD5,然後跟公開的這個MD5作一個比較就知道這個程式是否被第三方修改過。
- 檔案完整性驗證,比如當下載一個檔案時,伺服器返回的資訊中包括這個檔案的md5,在本地下載完畢時進行md5,將兩個md5值進行比較,如果一致則說明檔案完整沒有丟包現象。
- 檔案上傳,比如百度雲實現的秒傳,就是對比你上傳的檔案md5在百度伺服器是否已經存在了。
5. 一些疑問
1. 同一個檔案用不同的語言計算出來的md5一樣嗎?
只要演算法正確,都是一樣的。
2. 拷貝的檔案md5會改變嗎?
不會。
3. 還有什麼其他的摘要演算法麼?
除了MD5,還有更安全的SHA-1,SHA-2(包括SHA-224、SHA-256、SHA-384,和SHA-512 ),SHA-3,RIPEMD-160等雜湊加密演算法。
參考:
關於王小云破解MD5之我見 :https://blog.csdn.net/raptor/article/details/97270
MD5作用有哪些:https://blog.csdn.net/jike_yangyujing/article/details/80512205
MD5演算法原理及其實現:https://blog.csdn.net/u012611878/article/details/54000607
相關文章
- 2.3針對大資料量表的MD5校驗方式介紹大資料
- 介紹
- PostSync介紹
- FontFamily介紹
- Dubbo介紹
- Yocto 介紹
- 自我介紹
- git介紹Git
- Ninja介紹
- Duktape 介紹
- 公文介紹
- jsoncpp 介紹JSON
- Ceph介紹
- MySql介紹MySql
- GraphRAG介紹
- ServletContext介紹ServletContext
- RPC介紹RPC
- JCache 介紹
- StarRocks 介紹
- maven介紹Maven
- zigbee 介紹
- Appimage介紹APP
- github介紹Github
- GO 介紹Go
- Docker介紹Docker
- Operator介紹
- shell介紹
- RabbitMQ 介紹MQ
- gRPC介紹RPC
- springcloud介紹SpringGCCloud
- CSRedisCore 介紹Redis
- AJAX 介紹
- php介紹PHP
- Pyzmq介紹MQ
- Java介紹Java
- linq介紹
- GeoServer介紹Server
- uniswap介紹