文档章节

MD5加密类

sky_hebiao
 sky_hebiao
发布于 2016/12/07 10:21
字数 360
阅读 6
收藏 0
package com.clpc.core.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.Provider;
import java.security.Security;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

import org.apache.commons.codec.digest.DigestUtils;

public class Md5CaculateUtil {

    public Md5CaculateUtil(){
        
    }
    
    private static char[] hexChar = {
        '0','1','2','3','4','5','6','7','8','9',
        'a','b','c','d','e','f',
    };
    
    public static String getHash(String fileName,String hashType) throws IOException, NoSuchAlgorithmException{
        
        File f = new File(fileName);
        System.out.println(" -------------------------------------------------------------------------------");
        System.out.println("|当前文件名称:"+f.getName());
        System.out.println("|当前文件大小:"+(f.length()/1024/1024)+"MB");
        System.out.println("|当前文件路径[绝对]:"+f.getAbsolutePath());
        System.out.println("|当前文件路径[---]:"+f.getCanonicalPath());
        System.out.println(" -------------------------------------------------------------------------------");
        
        InputStream ins = new FileInputStream(f);
        
        byte[] buffer = new byte[8192];
        MessageDigest md5 = MessageDigest.getInstance(hashType);
        
        int len;
        while((len = ins.read(buffer)) != -1){
            md5.update(buffer, 0, len);
        }

        ins.close();
//        也可以用apache自带的计算MD5方法
//        return DigestUtils.md5Hex(md5.digest());
//        自己写的转计算MD5方法
        String ret = toHexString(md5.digest());
        System.out.println(ret);
        return ret;
    }
    
    
    protected static String toHexString(byte[] b){
        StringBuilder sb = new StringBuilder(b.length*2);
        for(int i=0;i<b.length;i++){
            sb.append(hexChar[(b[i] & 0xf0) >>> 4]);
            sb.append(hexChar[b[i] & 0x0f]);
        }
        return sb.toString();
    }
    
    /*
    * 获取MessageDigest支持几种加密算法
    */
//    @SuppressWarnings({ "rawtypes", "unchecked" })
//    private static String[] getCryptolmpls(String serviceType){
//        
//        Set result = new HashSet();
////        all providers
//        Provider[] providers = Security.getProviders();
//        for(int i=0;i<providers.length;i++){
////            get services provided by each provider
//            Set keys = providers[i].keySet();
//            for(Iterator it = keys.iterator();it.hasNext();){
//                String key = it.next().toString();
//                key = key.split(" ")[0];
//                
//                if(key.startsWith(serviceType+".")){
//                    result.add(key.substring(serviceType.length()+1));
//                }else if(key.startsWith("Alg.Alias."+serviceType+".")){
//                    result.add(key.substring(serviceType.length()+11));
//                }
//            }
//        }
//        return (String[]) result.toArray(new String[result.size()]);
//    }
    
    public static void toMD5(String fileName) throws NoSuchAlgorithmException, IOException{
    	String hash = getHash(fileName,"MD5");
        System.out.println("MD5:"+hash);
    }
    
    public static void main(String[] args) throws Exception, Exception {
//        long start = System.currentTimeMillis();
//        System.out.println("开始计算文件MD5值,请稍后...");
        String fileName = "D:\\callcenter\\10\\SND\\10000001#20150617162709.DAT";
//        String hashType = "MD5";
//        String hash = getHash(fileName,hashType);
//        System.out.println("MD5:"+hash);
//        long end = System.currentTimeMillis();
//        System.out.println("一共耗时:"+(end-start)+"毫秒");
    	toMD5(fileName);
    }
}

 

© 著作权归作者所有

共有 人打赏支持
上一篇: java 操作FTP类
下一篇: hadoop HDFS 操作
sky_hebiao
粉丝 0
博文 7
码字总数 4148
作品 0
大兴
后端工程师
私信 提问
Asp.Net Core 2.0 项目实战(7)MD5加密、AES&DES对称加解密

Asp.Net Core 2.0 项目实战(1) NCMVC开源下载了 Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架 Asp.Net Core 2.0 项目实战(3)NCMVC角色权限管理前...

郑州-在路上
04/26
0
0
网上常用MD5加密BUG

http://security.ctocio.com.cn/securitycomment/323/8179823.shtml 网上有个MD5加密类,估计大家经常用,但是这个MD5在多线程下如果先创建唯一实例,再每次调用就有很大的概率出现相同MD5值...

冰封情
2010/05/14
130
0
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(8)----非对称加密、BASE64加密、MD5等常用加密处理

俗话说,一个好汉十个帮,众人拾柴火焰高等都说明一个道理,有更多的资源,更丰富的积累,都是助你走向成功,走向顶峰的推动力。 本篇继续继续整理优化已有的共用类库,并继续发表随笔介绍公...

长平狐
2012/08/22
141
0
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(8)----非对称加密、BASE64加密、MD5等常用加密处理

俗话说,一个好汉十个帮,众人拾柴火焰高等都说明一个道理,有更多的资源,更丰富的积累,都是助你走向成功,走向顶峰的推动力。 本篇继续继续整理优化已有的共用类库,并继续发表随笔介绍公...

长平狐
2012/06/11
170
0
Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC

加密解密,曾经是我一个毕业设计的重要组件。在工作了多年以后回想当时那个加密、解密算法,实在是太单纯了。 言归正传,这里我们主要描述Java已经实现的一些加密解密算法,最后介绍数字证书...

mrliuze
2015/05/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

git 常用命令

本文档适合有一定git使用基础的用户,当使用时忘记使用命令可以起参考作用,新手请移步其他详细教程 下载安装 下载git完成之后,配置用户 $ git config --global user.name "Your Name"$ g...

杨鹏飞乀
7分钟前
1
0
返回历史页面,并刷新该历史页面

原来 还真的有 可以 返回历史 上一个页面,并刷新历史页面的 API的, 之前以为没有,所以只能每次返回 上一个页面的时候,都是直接 写上了 该页面的路径, 也就是直接去访问了。 而document....

之渊
9分钟前
0
0
MaxCompute新功能发布

2018年Q3 MaxCompute重磅发布了一系列新功能。 本文对主要新功能和增强功能进行了概述。 实时交互式查询:Lightning on MaxCompute 生态兼容:Spark on MaxCompute New SQL 新特性发布 Pyth...

阿里云云栖社区
10分钟前
1
0
PHP实现excel导入

1、前端写法 <input type="file" name="myfile" id="uploadingFiles" value="上传excel文件" /> <input type="text" name="mode" id="uploadingmode" value="" /> <button id="determin" cl......

葬-花
11分钟前
0
0
SpringBoot打jar包或war包获取不到资源文件解决办法

问题描述 在开发过程中我们经常会碰到要在代码中获取资源文件的情况,而我在最近将原有的Tomcat的原生项目迁移到SpringBoot项目中时碰到一个问题,就是在本地运行时,获取本地的xml资源文件是...

不学无数的程序员
17分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部