原文链接:http://www.cnblogs.com/yaowukonga/p/3523668.html
package io.bigdata;
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 {
private 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方法
// return toHexString(md5.digest());
}
public static String getHash2(String fileName){
File f = new File(fileName);
return String.valueOf(f.lastModified());
}
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 main(String[] args) throws Exception, Exception {
// 调用方法
// String[] names = getCryptolmpls("MessageDigest");
// for(String name:names){
// System.out.println(name);
// }
long start = System.currentTimeMillis();
System.out.println("开始计算文件MD5值,请稍后...");
String fileName = "E:\\Office_2010_Toolkit_2.2.3_XiaZaiBa.zip";
//// String fileName = "E:\\SoTowerStudio-3.1.0.exe";
String hashType = "MD5";
String hash = getHash(fileName,hashType);
System.out.println("MD5:"+hash);
long end = System.currentTimeMillis();
System.out.println("一共耗时:"+(end-start)+"毫秒");
}
}
相关推荐
digest,是最新一次计算结果之2进制内部表示,表示128bit之MD5值. getMD5ofStr是类MD5最主要之公共方法,入口参数是你想要进行MD5变换之字符串 返回之是变换完之结果,这个结果是从公共成员digestHexStr取得...
1:系统在上传文件时自动计算文件的md5值,并且检查该值是否存在,若存在则文件不再上传到服务器,直接进行引用原有的文件。 2:定时器定时检查限时分享的文件是否过期。 3:网盘目录结构可无限制层级创建,保存移动...
1:系统在上传文件时自动计算文件的md5值,并且检查该值是否存在,若存在则文件不再上传到服务器,直接进行引用原有的文件。 2:定时器定时检查限时分享的文件是否过期。 3:网盘目录结构可无限制层级创建,保存移动...
<项目介绍> A星算法Java实现+源代码+文档说明 A星算法Java实现 一、适用场景 在一张地图中,绘制从起点移动到终点的最优路径,...下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
基于知识图谱的中文症状问答系统,前端vue.js,后端springboot 开发语言是java,运行环境是windows 用到的技术:word2vec,doc2vec,编辑...下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
基于SpringBoot+Layui在线电子商城购物网站设计毕业源码案例设计 运行环境: 最好是java jdk 1.8,我们在这个平台上运行的,其他...下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
<项目介绍> 基于知识图谱的中文症状问答系统,前端vue.js,后端springboot 开发语言是java,运行环境是windows ...下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
# 项目名称 [含论文+答辩PPT+任务书+源码等]基于SSM框架演唱会网上订票系统 # 系统介绍 后台框架:Spring、SpringMVC、MyBatis...下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
2.1.4. 通过MD5校验和或GnuPG验证软件包的完整性 2.1.5. 安装布局 2.2. 使用二进制分发版的标准MySQL安装 2.3. 在Windows上安装MySQL 2.3.1. Windows系统要求 2.3.2. 选择安装软件包 2.3.3. 用自动安装器安装MySQL ...
2.1.4. 通过MD5校验和或GnuPG验证软件包的完整性 2.1.5. 安装布局 2.2. 使用二进制分发版的标准MySQL安装 2.3. 在Windows上安装MySQL 2.3.1. Windows系统要求 2.3.2. 选择安装软件包 2.3.3. 用自动安装器安装MySQL ...
2.1.4. 通过MD5校验和或GnuPG验证软件包的完整性 2.1.5. 安装布局 2.2. 使用二进制分发版的标准MySQL安装 2.3. 在Windows上安装MySQL 2.3.1. Windows系统要求 2.3.2. 选择安装软件包 2.3.3. 用自动安装器安装...
2.1.4. 通过MD5校验和或GnuPG验证软件包的完整性 2.1.5. 安装布局 2.2. 使用二进制分发版的标准MySQL安装 2.3. 在Windows上安装MySQL 2.3.1. Windows系统要求 2.3.2. 选择安装软件包 2.3.3. 用自动安装器安装...
2.1.4. 通过MD5校验和或GnuPG验证软件包的完整性 2.1.5. 安装布局 2.2. 使用二进制分发版的标准MySQL安装 2.3. 在Windows上安装MySQL 2.3.1. Windows系统要求 2.3.2. 选择安装软件包 2.3.3. 用自动安装器安装MySQL ...
Delphi XE2 正式版的破解...文件大小: 2.33G MD5: de8b9f897e2ad678643b64898470b707 Delphi Prism XE2 - ISO 1.28G http://altd.embarcadero.com/download/prism/xe2/prism_xe2_win.iso RadPHP XE2 - ISO 343M ...
2.1.4. 通过MD5校验和或GnuPG验证软件包的完整性 2.1.5. 安装布局 2.2. 使用二进制分发版的标准MySQL安装 2.3. 在Windows上安装MySQL 2.3.1. Windows系统要求 2.3.2. 选择安装软件包 2.3.3. 用自动安装器安装MySQL ...
通过MD5校验和或GnuPG验证软件包的完整性 2.1.5. 安装布局 2.2. 使用二进制分发版的标准MySQL安装 2.3. 在Windows上安装MySQL 2.3.1. Windows系统要求 2.3.2. 选择安装软件包 2.3.3. 用自动安装...