原文链接: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)+"毫秒");
}
}
相关推荐
在JAVA中实现MD5编码通常是为了数据校验、密码存储等目的,因为MD5能将数据转化为不可逆的128位(16字节)散列值,通常以32位的十六进制字符串表示。在此,我们将深入探讨如何在Java中不依赖任何第三方API来实现MD5...
在实际应用中,MD5经常用于验证文件的完整性,比如下载文件后,通过比较本地文件的MD5值与服务器上的MD5值,确认文件是否完整无误。 需要注意的是,虽然MD5算法在加密强度上已经不再安全,因为它容易受到碰撞攻击,...
根据提供的部分Java代码片段,我们可以看出这是一个简单的MD5算法实现类`MD5`,其主要功能包括初始化MD5上下文、更新散列值、计算最终的MD5值并将其转换为十六进制字符串表示形式。 1. **初始化MD5上下文 (`md5Init...
根据提供的文件信息,我们可以提取并总结出关于“JAVA加密MD5源代码”的一系列知识点: ### MD5算法简介 MD5(Message-Digest Algorithm 5)是一种广泛使用的密码散列函数,能够将任意长度的消息压缩为一个固定...
### MD5摘要算法详解:Java实现 #### 一、引言 MD5(Message-Digest Algorithm 5)是一种广泛使用的密码散列函数,能够将任意长度的信息转化为一个固定长度(通常为128位)的散列值或摘要。这个摘要通常被用来验证...
自2004年以来,研究人员已经能够找到具有相同MD5散列值的不同输入(即碰撞),这使得MD5不再适合用于需要高度安全性的场景,比如密码哈希和数字签名等。 ### 5. MD5在现代的应用 尽管存在安全问题,MD5仍然在某些...
总的来说,这个压缩包提供了一个支持多线程的MD5加密算法源代码实现,这对于处理大量数据的系统或者需要高效计算MD5值的场景非常有用。然而,需要注意的是,由于MD5的安全性问题,不推荐用于密码存储等需要高度安全...
4. **MD5循环:** 每个块都会经过四个不同的处理阶段,每个阶段包含若干轮运算,每轮运算包括四个不同的函数F、G、H和I,以及16个32位的W值,这些W值是根据当前块中的32位字计算得出的。 5. **更新中间变量:** 在...
- **数据完整性检查**:MD5常用于验证文件或数据的完整性,比如下载文件后通过比较本地文件的MD5值和服务器提供的MD5值,判断文件是否完整无误。 - **密码存储**:虽然MD5的碰撞攻击问题(即不同输入产生相同哈希...
在实际应用中,如果你发现有一个名为"MD5"的压缩包文件,这可能包含了一个Java程序,该程序实现了MD5算法,可能包括了MD5加密的完整流程,如上述代码所示。你可以解压文件并运行其中的Java程序,以验证或自定义MD5...
1. **文件校验**:MD5常用于验证文件的完整性和未被篡改,例如在下载文件后,可以通过计算本地文件的MD5值并与服务器提供的MD5值比较来确认文件是否正确传输。 2. **密码存储**:虽然现在MD5不再被认为足够安全,但...
4. **MD5计算**:对每个块执行四个独立的循环操作,每个循环包含16次迭代,每次迭代都使用四个不同的基本变换函数(F, G, H, I)。这四个函数与当前块中的16个32位字以及四个32位变量A, B, C, D相互作用,更新这些...
在这个`TestMd5.java`文件中,我们首先创建了一个`MessageDigest`对象,并指定算法为"MD5"。然后,我们将待加密的字符串转换为字节数组,通过`digest()`方法计算MD5摘要。最后,我们将得到的16字节的二进制数据转换...
在实际应用中,我们可以通过各种编程语言的库或工具来计算MD5值,例如Python的`hashlib`模块,Java的`java.security.MessageDigest`类,或者命令行工具如`md5sum`。理解MD5的工作原理并合理使用,可以帮助我们更好地...
例如,当你下载一个大文件时,服务器可能会提供该文件的MD5校验和,你可以使用MD5Generator计算本地文件的MD5值并与之比较,以确认文件在传输过程中没有被篡改。 MD5也常用于密码存储,尽管现在已经被认为不够安全...
源码是实现特定功能的编程代码,对于MD5源码而言,它包含了计算MD5哈希值的算法流程。这段代码通常包括以下几个关键步骤: 1. **初始化**: 开始计算前,对四个32位的中间变量A、B、C和D进行初始化,设置为特定的...
3. **MD5计算**:通过四个不同的函数(F, G, H, I)和四个32位的变量A, B, C, D,对每个消息块进行迭代运算,这些变量在每次迭代后都会更新。 4. **结果组合**:经过多次迭代后,四个变量A, B, C, D的值就是最终的MD...
根据给定文件的信息,本文将深入探讨MD5加密的基本原理及其在Java中的实现方式,并从中提炼出相关的IT知识点。 ### MD5加密概述 MD5(Message-Digest Algorithm 5)是一种广泛使用的散列函数,可以将任意长度的...
如果两个文件的MD5值相同,我们可以说它们的内容是完全一样的。然而,由于碰撞攻击的存在,MD5不再适用于安全敏感的应用,如密码存储,现在更倾向于使用SHA-2或SHA-3等更安全的哈希算法。 实例中可能包含了一个步骤...