java實現計算MD5

來源:互聯網
上載者:User

標籤:dex   加密   處理   buffers   color   while   組成   md5   java   

import java.io.FileInputStream;import java.security.DigestInputStream;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;public class MD5Class {    // 計算字串的MD5    public static String conVertTextToMD5(String plainText) {        try {            MessageDigest md = MessageDigest.getInstance("MD5");            md.update(plainText.getBytes());            byte b[] = md.digest();            int i;            StringBuffer buf = new StringBuffer("");            for (int offset = 0; offset < b.length; offset++) {                i = b[offset];                if (i < 0)                    i += 256;                if (i < 16)                    buf.append("0");                buf.append(Integer.toHexString(i));            }            // 32位加密            return buf.toString();            // 16位的加密            // return buf.toString().substring(8, 24);        } catch (NoSuchAlgorithmException e) {            e.printStackTrace();            return null;        }    }
  //計算檔案的MD5,支援4G一下的檔案(檔案親測,大檔案未親測) public static String conVertFileToMD5(String inputFilePath) { int bufferSize = 256 * 1024; FileInputStream fileInputStream = null; DigestInputStream digestInputStream = null; try { // 拿到一個MD5轉換器(同樣,這裡可以換成SHA1) MessageDigest messageDigest = MessageDigest.getInstance("MD5"); // 使用DigestInputStream fileInputStream = new FileInputStream(inputFilePath); digestInputStream = new DigestInputStream(fileInputStream, messageDigest); // read的過程中進行MD5處理,直到讀完檔案 byte[] buffer = new byte[bufferSize]; while (digestInputStream.read(buffer) > 0) ; // 擷取最終的MessageDigest messageDigest = digestInputStream.getMessageDigest(); // 拿到結果,也是位元組數組,包含16個元素 byte[] resultByteArray = messageDigest.digest(); // 同樣,把位元組數群組轉換成字串 return byteArrayToHex(resultByteArray); } catch (Exception e) { return null; } finally { try { digestInputStream.close(); } catch (Exception e) { } try { fileInputStream.close(); } catch (Exception e) { } } } private static String byteArrayToHex(byte[] byteArray) { // 首先初始化一個字元數組,用來存放每個16進位字元 char[] hexDigits = { ‘0‘, ‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘, ‘7‘, ‘8‘, ‘9‘, ‘A‘, ‘B‘, ‘C‘, ‘D‘, ‘E‘, ‘F‘ }; // new一個字元數組,這個就是用來組成結果字串的(解釋一下:一個byte是八位二進位,也就是2位十六進位字元(2的8次方等於16的2次方)) char[] resultCharArray = new char[byteArray.length * 2]; // 遍曆位元組數組,通過位元運算(位元運算效率高),轉換成字元放到字元數組中去 int index = 0; for (byte b : byteArray) { resultCharArray[index++] = hexDigits[b >>> 4 & 0xf]; resultCharArray[index++] = hexDigits[b & 0xf]; } // 字元數組組合成字串返回 return new String(resultCharArray); } public static void main(String[] args) { // 測試 System.out.println(MD5Class.conVertTextToMD5("hello")); System.out .println(conVertFileToMD5("C:\\Users\\administrator1\\Downloads\\StarUML-v2.8.0.msi")); }}

 

java實現計算MD5

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.