zoukankan      html  css  js  c++  java
  • 加密算法之 MD5算法

    题记:本人自测了很多次,该算法和apache的commons utils包中的MD5算法计算一致

    一、针对文件内容生成MD5值

    应用场景针对文件,在传输过程由于网络原因丢帧或者被人别恶意篡改内容,可以通过源文件的MD5和下载后的文件MD5值进行比较,如果一致说明文件内容相同,否则下载的文件有问题。

      该MD5代码计算这个文件内容,生成一个MD5值。

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.math.BigInteger;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    public class MD5Util {
        /**
         * 一次性处理的文件字节数
         */
        private static final int ONE_HANDLE_FILE_BYTE_COUNT = 8192;
    
        /**
         * MD5 算法
         */
        private static final String MD5_ALGORITHM = "MD5";
    
        /**
         * 无数据的索引值
         */
        private static final int NOT_DATA_INDEX = -1;
    
        /**
         * 正数符号
         */
        private static final int POSITIVE_SIGN = 1;
    
        /**
         * 十六进制
         */
        private static final int HEXADECIMAL = 16;
    
        /**
         * 生成文件内容的 MD5 值
         *
         * @param file
         * @return
         */
        public static String generateMD5(File file) {
            if (!file.isFile())//不是文件
                return null;
    
            MessageDigest digest;
            FileInputStream in = null;
            byte buffer[] = new byte[ONE_HANDLE_FILE_BYTE_COUNT];
            int len;
            try {
                digest = MessageDigest.getInstance(MD5_ALGORITHM);
                in = new FileInputStream(file);
    
                while ((len = in.read(buffer)) != NOT_DATA_INDEX) {
                    digest.update(buffer, 0, len);
                }
                BigInteger bigInteger = new BigInteger(POSITIVE_SIGN, digest.digest());
                return bigInteger.toString(HEXADECIMAL);
            } catch (NoSuchAlgorithmException e) {
                //logger.error(" 生成文件内容的 MD5", e);
                e.printStackTrace();
                return null;
            } catch (FileNotFoundException e) {
                //logger.error(" 生成文件内容的 MD5", e);
                e.printStackTrace();
                return null;
            } catch (IOException e) {
               // logger.error(" 生成文件内容的 MD5", e);
                e.printStackTrace();
                return null;
            } finally {
                try {
                    in.close();
                } catch (Exception e) {
                    e.printStackTrace();
                   // logger.error("关闭文件", e);
                }
            }
        }
    
           /* public static void main (String[]args){
    
               String md5 = MD5Util.generateMD5( new File("D:\\ip_20180823102738.txt"));
               System.out.println(md5);
            }*/
    
        }

    二、针对字符串生成MD5值

    应用场景:参数传输,保证参数的一致性

      这里采用apache的commons包中的MD5工具类计算。

    import org.apache.commons.codec.digest.DigestUtils;
    public class MD5Util {  
      public static void main (String[]args){
               String md5Test="MD5摘要算法"; 
               System.out.println(md5Test);
               String md5Hex = DigestUtils.md5Hex(md5Test);  #使用工具类对字符串生成MD5值
               System.out.print(md5Hex);
            }
    }

    Apache的commons包下载地址:http://commons.apache.org/proper/commons-codec/download_codec.cgi

    ##想了解更多加密算法,可以看https://www.cnblogs.com/ywjfx/p/9902628.html

  • 相关阅读:
    JavaScript面试题
    HTML&&css面试题
    nodejs面试题
    linux上安装apache
    linux上安装mysql
    linux基础命令学习(三)Vim使用
    linux基础命令学习(一)
    spring学习(六)注解方式实现AOP
    spring学习(五)详细介绍AOP
    spring学习(一)spring简介
  • 原文地址:https://www.cnblogs.com/ywjfx/p/9975763.html
Copyright © 2011-2022 走看看