• Java 计算文件的MD5值和Hash值


    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;
        }
    
    }
  • 相关阅读:
    文件批量上传
    XML如何不进行解析原样输出
    1456710017
    java标准百分比
    解决SSM项目下静态资源(img、js、css)无法引用的问题
    MySQL查询当天数据以及大量查询时提升速度
    多线程test
    JAVA中等待所有线程都执行结束(转2)
    java中等待所有线程都执行结束
    关于Java多线程(JAVA多线程实现的四种方式)
  • 原文地址:https://www.cnblogs.com/guliang/p/14840097.html
Copyright © 2020-2023  润新知