• Java实现MD5加密_字符串加密_文件加密


    Java实现MD5加密,具体代码如下:

    package com.bstek.tools;
    
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.security.DigestInputStream;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    
    /**
     * Md5
     * 提供对字符串的md5-->stringMD5 
     * 提供对文件的Md5-->fileMD5  
     * 
     * 对于大文件,可以使用DigestInputStream
     */
    public class Md5Utils {
    
        protected static char hexDigits[] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};  
        protected static MessageDigest messageDigest = null;
        
        static{  
            try{  
                // 拿到一个MD5转换器(如果想要SHA1参数换成”SHA1”)
                messageDigest = MessageDigest.getInstance("MD5");  
            }catch (NoSuchAlgorithmException e) {  
                System.err.println(Md5Utils.class.getName()+"初始化失败,MessageDigest不支持MD5Util.");  
                e.printStackTrace();  
            }  
        }
        
        private static String bufferToHex(byte bytes[], int m, int n) {  
           StringBuffer stringbuffer = new StringBuffer(2 * n);  
           int k = m + n;  
           for (int l = m; l < k; l++) {  
            appendHexPair(bytes[l], stringbuffer);  
           }  
           return stringbuffer.toString();  
        }  
              
        private static void appendHexPair(byte bt, StringBuffer stringbuffer) {  
         
           char c0 = hexDigits[(bt & 0xf0) >> 4];  
           char c1 = hexDigits[bt & 0xf];  
           stringbuffer.append(c0);  
           stringbuffer.append(c1);  
        } 
        
        private static String bufferToHex(byte bytes[]) {  
            return bufferToHex(bytes, 0, bytes.length);  
        }
        
        /**
         * 字符串的md5加密
         * @param input
         * @return
         */
        public static String stringMD5(String input) {
              // 输入的字符串转换成字节数组
             byte[] inputByteArray = input.getBytes();
             // inputByteArray是输入字符串转换得到的字节数组
             messageDigest.update(inputByteArray);
             // 转换并返回结果,也是字节数组,包含16个元素
             byte[] resultByteArray = messageDigest.digest();
             // 字符数组转换成字符串返回
             return bufferToHex(resultByteArray);
        }
        /**
         * 文件的md5加密
         * @param inputFile
         * @return
         * @throws IOException
         */
        public static String fileMD5(String inputFile) throws IOException {
              // 缓冲区大小(这个可以抽出一个参数)
              int bufferSize = 256 * 1024;
              FileInputStream fileInputStream = null;
              DigestInputStream digestInputStream = null;
              try {
                 // 使用DigestInputStream
                 fileInputStream = new FileInputStream(inputFile);
                 digestInputStream = new DigestInputStream(fileInputStream,messageDigest);
                 // read的过程中进行MD5处理,直到读完文件
                 byte[] buffer =new byte[bufferSize];
                 while (digestInputStream.read(buffer) > 0);
                 // 获取最终的MessageDigest
                 messageDigest= digestInputStream.getMessageDigest();
                 // 拿到结果,也是字节数组,包含16个元素
                 byte[] resultByteArray = messageDigest.digest();
                 // 同样,把字节数组转换成字符串
                 return bufferToHex(resultByteArray);
              } finally {
                 try {
                    digestInputStream.close();
                 } catch (Exception e) {
                 }
                 try {
                    fileInputStream.close();
                 } catch (Exception e) {
                 }
              }
           }
        
        /**
         * @param args
         */
        public static void main(String[] args) {
            //测试字符串MD5加密
            //123456: e10adc3949ba59abbe56e057f20f883e
            //eastcom:  6997c46956185a7c4d452646fc9c69e2
            System.out.println(stringMD5("eastcom"));
            
            
            try {
                long startTime = System.currentTimeMillis();
                //测试文件MD5加密
                String FilePath = "D:/ilink_ide.zip"; //4227e9fc4bd71ff34887d47867967b29
                System.out.println(fileMD5(FilePath));
                
                long endTime = System.currentTimeMillis(); 
                System.out.println((endTime - startTime)/1000); 
                
            } catch (IOException e) {
                
                e.printStackTrace();
            }
        }
    
        /**
         * 参考文章:
         *  http://www.zhihu.com/question/23702510
         *  http://blog.csdn.net/lf_software_studio/article/details/8025497
         *  http://my.oschina.net/laigous/blog/106646
         *  http://blog.csdn.net/wangqiuyun/article/details/22941433
         */
    
        
        
    }

    转载请注明出处...

    ----------- 赠人玫瑰,手有余香     如果本文对您有所帮助,动动手指扫一扫哟   么么哒 -----------


    未经作者 https://www.cnblogs.com/xin1006/ 梦相随1006 同意,不得擅自转载本文,否则后果自负
  • 相关阅读:
    国外名校课程视频爆红 网友总结“必杀技”(图)
    设置mysql密码
    Writing Linux LCD drivers—深入分析framebuffer设备驱动的结构
    LAMP架构中,php 与 php、php与C语言程序等 之间 的网络通信 问题
    API & ABI
    Linux 6初体验:桌面性能堪比新版Ubuntu
    diff 比较两个文件夹
    11种错误的保养皮肤习惯
    服务器领域Linux击败Windows的5大理由
    CentOS5.5 FTP安装配置
  • 原文地址:https://www.cnblogs.com/xin1006/p/5830892.html
Copyright © 2020-2023  润新知