import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; import java.nio.file.StandardOpenOption; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class FileMd5HashUtils { private static final char[] hexCode = "0123456789abcdef".toCharArray(); /** * 计算文件的MD5 * @param fileName 文件的绝对路径 * @return */ public static String getFileMD5(String fileName) { File file = new File(fileName); try (InputStream stream = Files.newInputStream(file.toPath(), StandardOpenOption.READ)) { MessageDigest digest = MessageDigest.getInstance("MD5"); byte[] buf = new byte[8192]; int len; while ((len = stream.read(buf)) > 0) { digest.update(buf, 0, len); } return toHexString(digest.digest()); } catch (IOException e) { e.printStackTrace(); return ""; } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return ""; } } public static String toHexString(byte[] data) { StringBuilder r = new StringBuilder(data.length * 2); for (byte b : data) { r.append(hexCode[(b >> 4) & 0xF]); r.append(hexCode[(b & 0xF)]); } return r.toString(); } /** * 计算文件的Hash256值 * @param fileName 文件的绝对路径 * @return */ public static String getFileHash256(String fileName){ File file = new File(fileName); FileInputStream fis = null; String sha256 = ""; try { fis = new FileInputStream(file); MessageDigest md = MessageDigest.getInstance("SHA-256"); byte buffer[] = new byte[1024]; int length = -1; while ((length = fis.read(buffer, 0, 1024)) != -1) { md.update(buffer, 0, length); } byte[] digest = md.digest(); sha256 = byte2hexLower(digest); } catch (Exception e) { e.printStackTrace(); return ""; } finally { try { if (fis != null) { fis.close(); } } catch (IOException e) { e.printStackTrace(); return ""; } } return sha256; } private static String byte2hexLower(byte[] b) { String hs = ""; String stmp = ""; for (int i = 0; i < b.length; i++) { stmp = Integer.toHexString(b[i] & 0XFF); if (stmp.length() == 1) { hs = hs + "0" + stmp; } else { hs = hs + stmp; } } return hs; } }
原文:https://www.cnblogs.com/guliang/p/14840097.html