md5加密原理

來源:互聯網
上載者:User

md5加密原理

首先要明白一個概念,md5不是用於加密,而是用於資料的完整性校正的一種技術。

這是一個單向散列函數,單向的意思就是說無法復原轉。你可以將源內容通過md5函數散列出一個md5校正碼,這個md5校正碼是唯一的,你可以作為證明源的身份標識,但是你無法通過md5校正碼去還原源。

Src ---> md5 --->md5Code
但是 md5Code --->某演算法 ---> Src 是不可能的

同樣的內容經過md5演算法總是得到相同的md5校正碼。

之所以給人以md5是用於加密的這種假象,是因為該技術應用於很多密碼校正和檔案完整性校正過程中。

如你的password用明文輸入,經過md5以後形成一個32位元組的 md5校正碼,儲存在伺服器上。伺服器的管理員可以看到你的32位元組的md5校正碼,但是因為沒有辦法通過md5校正碼還原成原密碼,因此該密碼的儲存(實際上是儲存的密碼的一個唯一標識)是安全的。

校正的時候,你輸入你的密碼,經過md5以後形成一個新的32位元組的md5校正碼,伺服器比較新的校正碼和舊的校正碼就可以判斷你是否輸入了正確的密碼。在整個認證和鑒權的過程中,伺服器只和你的密碼產生以後的md5校正碼打交道,而避免了和密碼直接打交道。

其次用得非常多的是檔案的完整性校正。
我們都經常從FTP網站上下載檔案,在Internet不可信任的環境中,存在很多的不安全因素。如果你下載的session被人截獲,並在下載的檔案中插入危險代碼,使得當你下載完畢運行程式的時候植入木馬或者病毒或者其他非安全的代碼。要驗證檔案的完整性,FTP server一般將整個檔案夾打成包,如iso檔案,然後同時給出md5校正碼。當你下在該iso檔案,在刻盤之前,運行md5程式產生一個md5校正碼,如果和FTP Server上的校正碼一樣,就可以證明:在檔案傳輸的過程中沒有產生錯誤和任何修改。如果你信賴該FTP
Server,那麼你就可以放心使用該檔案或資源。

範例: Java代碼
 

  1.   
  2. import java.security.MessageDigest;   
  3. import java.security.NoSuchAlgorithmException;   
  4.   
  5. public class md5 {   
  6.  public String str;   
  7.   
  8.  public void md5s(String plainText) {   
  9.   try {   
  10.    MessageDigest md = MessageDigest.getInstance("MD5");   
  11.    md.update(plainText.getBytes());   
  12.    byte b[] = md.digest();   
  13.   
  14.    int i;   
  15.   
  16.    StringBuffer buf = new StringBuffer("");   
  17.    for (int offset = 0; offset < b.length; offset++) {   
  18.     i = b[offset];   
  19.     if (i < 0)   
  20.      i += 256;   
  21.     if (i < 16)   
  22.      buf.append("0");   
  23.     buf.append(Integer.toHexString(i));   
  24.    }   
  25.    str = buf.toString();   
  26.    System.out.println("result: " + buf.toString());// 32位的加密
      
  27.    System.out.println("result: " + buf.toString().substring(8, 24));// 16位的加密
      
  28.   } catch (NoSuchAlgorithmException e) {   
  29.    // TODO Auto-generated catch block   
  30.    e.printStackTrace();   
  31.   
  32.   }   
  33.  }   
  34.   
  35.  public static void main(String agrs[]) {   
  36.   md5 md51 = new md5();   
  37.   md51.md5s("4");//加密4
      
  38.  }   
  39.   
  40. }   

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.