MD5/SHA1加密檔案
阿新 • • 發佈:2018-12-21
import java.io.FileInputStream; import java.io.IOException; import java.security.DigestInputStream; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; /** * @version 1.0 * @description */ public class Md5Util { protected static char hexDigits[] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; protected static MessageDigest messageDigest = null; protected static String convert="MD5"; static{ try{ // 拿到一個MD5轉換器(如果想要SHA1引數換成”SHA1”) messageDigest = MessageDigest.getInstance(convert); }catch (NoSuchAlgorithmException e) { System.err.println(Md5Util.class.getName()+"初始化失敗,MessageDigest不支援MD5Util."); e.printStackTrace(); } } private static String bufferToHex(byte bytes[], int m, int n) { StringBuffer stringbuffer = new StringBuffer(2 * n); int k = m + n; for (int l = m; l < k; l++) { appendHexPair(bytes[l], stringbuffer); } return stringbuffer.toString(); } private static void appendHexPair(byte bt, StringBuffer stringbuffer) { char c0 = hexDigits[(bt & 0xf0) >> 4]; char c1 = hexDigits[bt & 0xf]; stringbuffer.append(c0); stringbuffer.append(c1); } private static String bufferToHex(byte bytes[]) { return bufferToHex(bytes, 0, bytes.length); } /** * 字串的md5加密 * @param input * @return */ public static String stringMD5(String input) { // 輸入的字串轉換成位元組陣列 byte[] inputByteArray = input.getBytes(); // inputByteArray是輸入字串轉換得到的位元組陣列 messageDigest.update(inputByteArray); // 轉換並返回結果,也是位元組陣列,包含16個元素 byte[] resultByteArray = messageDigest.digest(); // 字元陣列轉換成字串返回 return bufferToHex(resultByteArray); } /** * 檔案的md5加密 * @param inputFile * @return * @throws IOException */ public static String fileMD5(String inputFile) throws IOException { // 緩衝區大小(這個可以抽出一個引數) int bufferSize = 256 * 1024; FileInputStream fileInputStream = null; DigestInputStream digestInputStream = null; try { // 使用DigestInputStream fileInputStream = new FileInputStream(inputFile); digestInputStream = new DigestInputStream(fileInputStream,messageDigest); // read的過程中進行MD5處理,直到讀完檔案 byte[] buffer =new byte[bufferSize]; byte[] resultByteArray =null; while (digestInputStream.read(buffer) > 0) { // 獲取最終的MessageDigest messageDigest= digestInputStream.getMessageDigest(); // 拿到結果,也是位元組陣列,包含16個元素 resultByteArray= messageDigest.digest(); // 同樣,把位元組陣列轉換成字串 } return bufferToHex(resultByteArray); } finally { try { digestInputStream.close(); } catch (Exception e) { } try { fileInputStream.close(); } catch (Exception e) { } } } }