1. 程式人生 > >檔案和字串的加密工具類md5

檔案和字串的加密工具類md5

直接上演算法封裝的工具類程式碼:

[html] view plain copy  print?在CODE上檢視程式碼片派生到我的程式碼片
  1. package com.itydl.utils;  
  2. import java.io.File;  
  3. import java.io.FileInputStream;  
  4. import java.io.FileNotFoundException;  
  5. import java.io.IOException;  
  6. import java.security.MessageDigest;  
  7. import java.security.NoSuchAlgorithmException;  
  8. /**  
  9.  * 針對字串做的md5加密,以及涉及md5操作的工具類  
  10.  * @author lenovo  
  11.  *  
  12.  */  
  13. public class Md5Utils {  
  14.     /**  
  15.      * 返回檔案的md5值  
  16.      * @param path  
  17.      *      要加密的檔案的路徑  
  18.      * @return  
  19.      *      檔案的md5值  
  20.      */  
  21.     public static String getFileMD5(String path){  
  22.         StringBuilder sb = new StringBuilder();  
  23.         try {  
  24.             FileInputStream fis = new FileInputStream(new File(path));  
  25.             //獲取MD5加密器  
  26.             MessageDigest md = MessageDigest.getInstance("md5");  
  27.             //類似讀取檔案  
  28.             byte[] bytes = new byte[10240];//一次讀取寫入10k  
  29.             int len = 0;  
  30.             while((len
     = fis.read(bytes))!=-1){//從原目的地讀取資料  
  31.                 //把資料寫到md加密器,類比fos.write(bytes, 0, len);  
  32.                 md.update(bytes, 0, len);  
  33.             }  
  34.             //讀完整個檔案資料,並寫到md加密器中  
  35.             byte[] digest = md.digest();//完成加密,得到md5值,但是是byte型別的。還要做最後的轉換  
  36.             for (byte b : digest) {//遍歷位元組,把每個位元組拼接起來  
  37.                 //把每個位元組轉換成16進位制數  
  38.                 int d = b & 0xff;//只保留後兩位數  
  39.                 String herString = Integer.toHexString(d);//把int型別資料轉為16進位制字串表示  
  40.                 //如果只有一位,則在前面補0.讓其也是兩位  
  41.                 if(herString.length()==1){//位元組高4位為0  
  42.                     herString = "0"+herString;//拼接字串,拼成兩位表示  
  43.                 }  
  44.                 sb.append(herString);  
  45.             }  
  46.         } catch (FileNotFoundException e) {  
  47.             // TODO Auto-generated catch block  
  48.             e.printStackTrace();  
  49.         } catch (NoSuchAlgorithmException e) {  
  50.             // TODO Auto-generated catch block  
  51.             e.printStackTrace();  
  52.         } catch (IOException e) {  
  53.             // TODO Auto-generated catch block  
  54.             e.printStackTrace();  
  55.         }  
  56.         return sb.toString();  
  57.     }  
  58.     /**  
  59.      * 對傳遞過來的字串進行md5加密  
  60.      * @param str  
  61.      *      待加密的字串  
  62.      * @return  
  63.      *      字串Md5加密後的結果  
  64.      */  
  65.     public static String md5(String str){  
  66.         StringBuilder sb = new StringBuilder();//字串容器  
  67.         try {  
  68.             //獲取md5加密器.public static MessageDigest getInstance(String algorithm)返回實現指定摘要演算法的 MessageDigest 物件。  
  69.             MessageDigest md = MessageDigest.getInstance("MD5");  
  70.             byte[] bytes = str.getBytes();//把要加密的字串轉換成位元組陣列  
  71.             byte[] digest = md.digest(bytes);//使用指定的 【byte 陣列】對摘要進行最後更新,然後完成摘要計算。即完成md5的加密  
  72.             for (byte b : digest) {  
  73.                 //把每個位元組轉換成16進位制數  
  74.                 int d = b & 0xff;//只保留後兩位數  
  75.                 String herString = Integer.toHexString(d);//把int型別資料轉為16進位制字串表示  
  76.                 //如果只有一位,則在前面補0.讓其也是兩位  
  77.                 if(herString.length()==1){//位元組高4位為0  
  78.                     herString = "0"+herString;//拼接字串,拼成兩位表示  
  79.                 }  
  80.                 sb.append(herString);  
  81.             }  
  82.         } catch (NoSuchAlgorithmException e) {  
  83.             // TODO Auto-generated catch block  
  84.             e.printStackTrace();  
  85.         }  
  86.         return sb.toString();  
  87.     }  
  88. }