• java 文件md5+字符串md5 实现


    import org.apache.commons.codec.binary.Hex;
    import org.apache.commons.codec.digest.DigestUtils;
    import org.apache.log4j.Logger;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    
    /**
     * md5算法工具
     */
    public class MD5BigFileUtil {
        private final static Logger logger = Logger.getLogger(MD5BigFileUtil.class);
        static MessageDigest md = null;
    
        static {
            try {
                md = MessageDigest.getInstance("MD5");
            } catch (NoSuchAlgorithmException ne) {
                logger.error("NoSuchAlgorithmException: md5", ne);
            }
        }
    
        /**
         * 对一个文件求他的md5值
         * @param f 要求md5值的文件
         * @return md5串
         */
        public static String md5(File f) {
            FileInputStream fis = null;
            try {
                fis = new FileInputStream(f);
                //100KB each time
                byte[] buffer = new byte[102400];
                int length;
                long loopCount = 0;
                while ((length = fis.read(buffer)) != -1) {
                    md.update(buffer, 0, length);
                    loopCount++;
                }
                
                logger.debug("read file to buffer loopCount:"+loopCount);
    
                return new String(Hex.encodeHex(md.digest()));
            } catch (FileNotFoundException e) {
                logger.error("md5 file " + f.getAbsolutePath() + " failed:" + e.getMessage());
                return null;
            } catch (IOException e) {
                logger.error("md5 file " + f.getAbsolutePath() + " failed:" + e.getMessage());
                return null;
            } finally {
                try {
                    if (fis != null) fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    
        /**
         * 求一个字符串的md5值
         * @param target 字符串
         * @return md5 value
         */
        public static String md5(String target) {
            return DigestUtils.md5Hex(target);
        }
        
        public static void main(String[] args) {
            long begin =System.currentTimeMillis();
            System.out.println(md5(new File("G:/BT/PremierePro_6_LS7.7z")));
            long end =System.currentTimeMillis();
            System.out.println("time:"+((end-begin)/1000)+"s");
            
            System.out.println(md5("hello world"));
        }
    
    }
  • 相关阅读:
    设计模式二(建造者、原型、桥接)
    MSSQL根据表名动态分页的存储过程以及C#.net调用使用
    查询身份证号码信息(C#.NET)
    初试三层+抽象工厂代码生成器
    NET多线程与异步编程
    【SQL.SERVER.DMVS.实战】学习笔记
    【SQL.SERVER.DMVS.实战】学习笔记(二)
    SQL Server 2005数据文件数据的存储
    ASP.NET第九天加强课程
    ASP.NET第四天加强课程
  • 原文地址:https://www.cnblogs.com/yanghuahui/p/3139424.html
Copyright © 2020-2023  润新知