java獲取檔案MD5,獲取字串MD5
阿新 • • 發佈:2018-12-11
獲取md5值4個步驟:
1.建立MessageDigest物件md5。
2.使用md的update(byte[] buffer)方法將資料更新到md5物件中。
3.使用md5的digest()方法獲得摘要,該摘要是一個長度為16的陣列。
4.將該摘要陣列轉換為32位的md5值.
注意:如果要獲得16位的md5值就是取32位的md5值的中間16位。可以使用subString(8,24)擷取。
以下是獲得檔案和字串md5的方法,去除main方法即可作為一個工具類。
package com.wenba1314.tools; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5Tool { private static MessageDigest md; static { try { //初始化摘要物件 md = MessageDigest.getInstance("md5"); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } } public static void main(String[] args) throws IOException { System.out.println(generateMD5ForString("test")); System.out.println(generateMD5ForFile(new File("1.jpg"))); } //獲得字串的md5值 public static String generateMD5ForString(String str){ //更新摘要資料 md.update(str.getBytes()); //生成摘要陣列 byte[] digest = md.digest(); //清空摘要資料,以便下次使用 md.reset(); return formatByteArrayTOString(digest); } //獲得檔案的md5值 public static String generateMD5ForFile(File file) throws IOException { //建立檔案輸入流 FileInputStream fis = new FileInputStream(file); //將檔案中的資料寫入md物件 byte[] buffer = new byte[1024]; int len=-1; while ((len = fis.read(buffer)) != -1) { md.update(buffer, 0, len); } fis.close(); //生成摘要陣列 byte[] digest = md.digest(); //清空摘要資料,以便下次使用 md.reset(); return formatByteArrayTOString(digest); } //將摘要位元組陣列轉換為md5值 public static String formatByteArrayTOString(byte[] digest) { //建立sb用於儲存md5值 StringBuffer sb = new StringBuffer(); int temp; for (int i=0;i<digest.length;i++) { //將資料轉化為0到255之間的資料 temp=digest[i]&0xff; if (temp < 16) { sb.append(0); } //Integer.toHexString(temp)將10進位制數字轉換為16進位制 sb.append(Integer.toHexString(temp)); } return sb.toString(); } }