Java加密與解密:消息摘要算法MD5

2020-12-25 itency

消息摘要算法又稱為散列算法,其核心在於散列函數的單向性。即通過散列函數可獲得對應的散列值,但不可通過該散列值反推其原始信息。這就是消息摘要算法安全性的根本所在。

簡述

MD5算法是典型的消息摘要算法,其前身有MD2、MD3和MD4算法,它由MD4、MD3和MD2算法改進而來。不論是哪一種MD算法,它們都需要獲得一個隨機長度的信息並產生一個123位的信息摘要。如果將這個128位的二進位摘要信息換算成十六進位,可以得到一個32位的字符串,故我們見到的大部分MD5算法的數字指紋都是32為十六進位的字符串。

MD算法家族的發展史:

MD2算法:

1989年,著名的非對稱算法RSA發明人之一----麻省理工學院教授羅納德.李維斯特開發了MD2算法。這個算法首先對信息進行數據補位,使信息的字節長度是16的倍數。再以一個16位的檢驗和做為補充信息追加到原信息的末尾。最後根據這個新產生的信息計算出一個128位的散列值,MD2算法由此誕生。

MD4算法:

1990年,羅納德.李維斯特教授開發出較之MD2算法有著更高安全性的MD4算法。在這個算法中,我們仍需對信息進行數據補位。不同的是,這種補位使其信息的字節長度加上448個字節後成為512的倍數(信息字節長度mod 512 =448)。此外,關於MD4算的處理和MD2算法有很大的差別。但最終仍舊會獲得一個128為的散列值。MD4算法對後續消息摘要算法起到了推動作用,許多比較有名的消息摘要算法都是在MD4算法的基礎上發展而來的,如MD5、SHA-1、RIPE-MD和HAVAL算法等。

MD5算法:

1991年,繼MD4算法後,羅納德.李維斯特教授開發了MD5算法,將MD算法推向成熟。MD5算法經MD2、MD3和MD4算法發展而來,算法複雜程度和安全強度打打提高,但浙西MD算法的最終結果都是產生一個128位的信息摘要。這也是MD系列算法的特點。

實現

MD系統算法的實現通過MessageDigest類來完成的,如需以流的處理方式完成消息摘要,則需使用DigestInputStream和DigestOutputStream。

MD2和MD5算法實現:

package com.code;import java.security.MessageDigest;import javax.xml.bind.annotation.adapters.HexBinaryAdapter;public class MDCoder {// MD2加密 public static String encodeMd2(byte[] data) throws Exception { // 初始化MessageDigest MessageDigest md = MessageDigest.getInstance("MD2"); // 執行摘要信息 byte[] digest = md.digest(data); // 將摘要信息轉換為32位的十六進位字符串 return new String(new HexBinaryAdapter().marshal(digest)); } // MD5加密 public static String encodeMd5(byte[] data) throws Exception { // 初始化MessageDigest MessageDigest md = MessageDigest.getInstance("MD5"); // 執行摘要信息 byte[] digest = md.digest(data); // 將摘要信息轉換為32位的十六進位字符串 return new String(new HexBinaryAdapter().marshal(digest)); }}

MD2和MD5算法實現測試類:

package com.test;import com.code.MDCoder;public class MDCoderTest {public static void main(String[] args) throws Exception { String testString = "www.itency.com"; System.out.println(MDCoder.encodeMd2(testString.getBytes())); System.out.println(MDCoder.encodeMd5(testString.getBytes())); }}

輸出結果:

5EEDD6F7A14ED9891703945FCA8AF2E05F3268E6A23D1119F4AB5319BAEF0E51

相關焦點

  • 一種基於Md5算法的改進加密方法
    由於md5算法的使用不需要支付任何版權費用的,所以在一般的情況下,md5也不失為一種非常優秀的加密算法,被大量公司和個人廣泛使用。MD5是一個安全的散列算法,輸入兩個不同的明文不會得到相同的輸出值,根據輸出值,不能得到原始的明文,即其過程不可逆;所以要解密MD5沒有現成的算法,只能用窮舉法,把可能出現的明文,用MD5算法散列之後,把得到的散列值和原始的數據形成一個一對一的映射表,通過比在表中比破解密碼的MD5算法散列值,通過匹配從映射表中找出破解密碼所對應的原始明文。
  • Python 中 MD5 加密
    Message Digest Algorithm MD5(中文名為消息摘要算法第五版)為計算機安全領域廣泛使用的一種散列函數,用以提供消息的完整性保護
  • Java加密與解密:消息摘要算法SHA
    SHA算法基於MD4算法基礎之上,作為MD算法的繼任者,成為新一代消息摘要算法的代表。SHA與MD算法不同之處主要在於摘要長度,SHA算法的摘要長度更長,安全性更高。簡述:SHA(Secure Hash Algorithm,安全散列算法)是消息摘要算法的一種,被廣泛認可的MD5算法的繼任者。
  • CSharp如何運用MD5算法加密密碼?
    MD5(Message-Digest Algorithm 5)是一種廣泛使用的「消息-摘要算法」。這是一個單項散列函數,數據經過單向散列函數獲取一個固定長度的散列值,資料庫的籤名就是計算資料庫的散列值,MD5算法的散列值為128位。
  • 講道理,MD5 到底是不是加密算法?
    二、加密算法百度百科:加密,是以某種特殊的算法改變原有的信息數據,使得未授權的用戶即使獲得了已加密的信息,但因不知解密的方法,仍然無法了解信息的內容。維基百科:在密碼學中,加密(英語:Encryption)是將明文信息改變為難以讀取的密文內容,使之不可讀的過程。只有擁有解密方法的對象,經由解密過程,才能將密文還原為正常可讀的內容。
  • php幾種常用的加密解密算法
    內容原創本文給大家介紹php的三種常用的加密解密算法,有一定的參考價值,有需要的朋友可以參考一下,希望對你們有所幫助。';echo '默認MD5加密的字符串為:'.md5($str)."\r\n"; echo '第二個參數為TRUE MD5加密的字符串為:'.md5($str,true) .
  • C Sharp程式語言如何實現MD5加密的一個實例分享
    一、MD5介紹:MD5在軟體行業是再常見不過的一個詞了,即使你從沒使用過它,也不知道它到底是個什麼東西,但你肯定聽過這個詞MD5的全稱是message-digest algorithm 5(信息-摘要算法
  • java最常用的幾種加密算法
    MD5MD5即Message-Digest Algorithm 5(信息-摘要算法5),用於確保信息傳輸完整一致。是計算機廣泛使用的雜湊算法之一(又譯摘要算法、哈希算法),主流程式語言普遍已有MD5實現。將數據(如漢字)運算為另一固定長度值,是雜湊算法的基礎原理,MD5的前身有MD2、MD3和MD4。廣泛用於加密和解密技術,常用於文件校驗。校驗?
  • Java 常用的兩種加密原理
    加密定義:.1.對稱加密:需要對加密和解密使用相同密鑰的加密算法。由於其速度快,對稱性加密通常在消息發送方需要加密大量數據時使用。對稱性加密也稱為密鑰加密。所謂對稱,就是採用這種加密方法的雙方使用方式用同樣的密鑰進行加密和解密。密鑰是控制加密及解密過程的指令。算法是一組規則,規定如何進行加密和解密。加密的安全性不僅取決於加密算法本身,密鑰管理的安全性更是重要。因為加密和解密都使用同一個密鑰,如何把密鑰安全地傳遞到解密者手上就成重中之重的問題。
  • Java加密與解密:Base64算法
    一段明文經過Base64加密後變得面目全非,又經過解密後恢復明文本來的面目,很有加密與解密算法的特徵。Base64不過並不是加密算法,僅僅是比較靠近加密算法。Base64算法的由來Base64算法主要最早用於解決電子郵件傳輸問題。在早期,由於歷史問題,電子郵件只允許傳輸ASCII碼字符。
  • 加密算法科普:des、aes加密、對稱、非對稱加密、Hash算法都是啥
    對稱密碼算法有時又叫傳統密碼算法、秘密密鑰算法或單密鑰算法,非對稱密碼算法也叫公開密鑰密碼算法或雙密鑰算法。對稱密碼算法的加密密鑰能夠從解密密鑰中推算出來,反過來也成立。在大多數對稱算法中,加密解密密鑰是相同的。它要求發送者和接收者在安全通信之前,商定一個密鑰。對稱算法的安全性依賴於密鑰,洩漏密鑰就意味著任何人都能對消息進行加密解密。只要通信需要保密,密鑰就必須保密。
  • 一文讀懂對稱加密算法、非對稱加密算法和Hash算法
    一、簡述常見的加密算法可以分成三類,對稱加密算法,非對稱加密算法和Hash算法。對稱加密指加密和解密使用相同密鑰的加密算法。對稱加密算法的優點在於加解密的高速度和使用長密鑰時的難破解性。常見的對稱加密算法:DES、3DES、DESX、Blowfish、IDEA、RC4、RC5、RC6和AES非對稱加密指加密和解密使用不同密鑰的加密算法,也稱為公私鑰加密。假設兩個用戶要加密交換數據,雙方交換公鑰,使用時一方用對方的公鑰加密,另一方即可用自己的私鑰解密。
  • 小知識科普篇——關於加密算法
    常見加密算法(後附對比說明表)1、MD5算法MD5用的是哈希函數,它的典型應用是對一段信息產生信息摘要,以防止被篡改。嚴格來說,MD5不是一種加密算法而是摘要算法。無論是多長的輸入,MD5都會輸出長度為128bits的一個串(通常用16進位表示為32個字符)。
  • MD5 簡介,及其在 Java 中的實現方式
    MD5,Message Digest Algorithm 5,是一種被廣泛使用的信息摘要算法,可以將給定的任意長度數據通過一定的算法計算得出一個 128 位固定長度的散列值。不過,經過 MD4、MD3 等幾代算法的優化,MD5 已經充分利用散列的分散性高度避免碰撞的發生。可以看出,MD5 是一種不可逆的算法,也就說,你無法通過得到的 MD5 值逆向算出原數據內容。正是憑藉這些特點,MD5 被廣泛使用。
  • 區塊鏈核心知識丨Hash算法原理
    一般用於快速查找和加密算法。簡單解釋:哈希(Hash)算法,即散列函數。它是一種單向密碼體制,即它是一個從明文到密文的不可逆的映射,只有加密過程,沒有解密過程。同時,哈希函數可以將任意長度的輸入經過變化以後得到固定長度的輸出。哈希函數的這種單向特徵和輸出數據長度固定的特徵使得它可以生成消息或者數據。
  • MD5 到底是不是加密?
    提到 MD5,大多數人的反應都是「這是一種加密算法」,懂得多點的人還會說「可以用於給密碼加密」,再懂點的還知道「MD5 已經有被破解的可能性了」。但 MD5 到底是加密嗎?所謂的加密到底是什麼意思?MD5 的破解又是指的什麼?MD5:一種哈希算法實質上,MD5 只是一種哈希算法。
  • 聊聊對稱/非對稱加密在HTTPS中的使用
    對稱/非對稱加密算法能夠避免信息竊取,而消息摘要算法能夠避免信息篡改。對稱加密算法發送方和接收方需要持有同一把密鑰,發送消息和接收消息均使用該密鑰。相對於非對稱加密,對稱加密具有更高的加解密速度,但雙方都需要事先知道密鑰,密鑰在傳輸過程中可能會被竊取,因此安全性沒有非對稱加密高。
  • 【原創】某PHP加密文件調試解密過程
    實驗樣本http://www.phpjiami.com/據說「加密效果同行最高」?到 http://www.phpjiami.com/phpjiami.html 隨意上傳一個 php 文件,然後下載加密後的文件,這就是我們要解密的文件。
  • 收集幾種加密算法及它們之間的比較,有需要可以先收藏哦
    Rijndael 算法;8、BLOWFISH,它使用變長的密鑰,長度可達448位,運行速度很快;9、MD5:嚴格來說不算加密算法,只能說是摘要算法;10、PKCS:The Public-Key Cryptography Standards (PKCS)是由美國RSA數據安全公司及其合作夥伴制定的一組公鑰密碼學標準
  • [基礎] 幾種好用的PHP自定義加密函數(可逆/不可逆)
    項目中有時我們需要使用PHP將特定的信息進行加密,也就是通過加密算法生成一個加密字符串,這些加密後的字符串可以通過解密算法進行解密,便於程序對解密後的信息進行處理。最常見的應用在用戶登錄以及一些API數據交換的場景。加密解密原理一般都是通過一定的加密解密算法,將密鑰加入到算法中,最終得到加密解密結果。