从网上找的MD5验证大文件的MD5算法的确可以验证大文件,但是当字节向内存做映射的时候若字节数大于690M左右,就会出错,看高人提示,便利用循环重新写了下,效果不错,速度也很快!
有需要的朋友直接使用
package com.x7700.bbs7.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5 {
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 {
messageDigest = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException nsaex) {
System.err.println(MD5.class.getName()+"初始化失败,MessageDigest不支持MD5!");
nsaex.printStackTrace();
}
}
public static void main(String[] args) throws IOException {
long begin = System.currentTimeMillis();
File big = new File("文件绝对路径");
String md5 = getFileMD5String(big);
//String md5 = getMD5String("a");
long end = System.currentTimeMillis();
System.out.println("md5:" + md5 + " time:" + ((end - begin) / 1000) + "s");
}
public static String getFileMD5String(File file) throws IOException {
FileInputStream in = new FileInputStream(file);
FileChannel ch = in.getChannel();
//700000000 bytes are about 670M
int maxSize=700000000;
long startPosition=0L;
long step=file.length()/maxSize;
if(step == 0){
MappedByteBuffer byteBuffer = ch.map(FileChannel.MapMode.READ_ONLY, 0,file.length());
messageDigest.update(byteBuffer);
return bufferToHex(messageDigest.digest());
}
for(int i=0;i<step;i++){
MappedByteBuffer byteBuffer = ch.map(FileChannel.MapMode.READ_ONLY, startPosition,maxSize);
messageDigest.update(byteBuffer);
startPosition+=maxSize;
}
if(startPosition==file.length()){
return bufferToHex(messageDigest.digest());
}
MappedByteBuffer byteBuffer = ch.map(FileChannel.MapMode.READ_ONLY, startPosition,file.length()-startPosition);
messageDigest.update(byteBuffer);
return bufferToHex(messageDigest.digest());
}
public static String getMD5String(String s) {
return getMD5String(s.getBytes());
}
public static String getMD5String(byte[] bytes) {
messageDigest.update(bytes);
return bufferToHex(messageDigest.digest());
}
private static String bufferToHex(byte bytes[]) {
return bufferToHex(bytes, 0, bytes.length);
}
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);
}
public static boolean checkPassword(String password, String md5PwdStr) {
String s = getMD5String(password);
return s.equals(md5PwdStr);
}
}
分享到:
相关推荐
### Java MD5验证知识点 #### 一、MD5概述 MD5(Message-Digest Algorithm 5)是一种广泛使用的散列算法,它能够将任意长度的数据转换为一个固定长度(通常是128位)的十六进制字符串。这种转换通常被称为散列值或...
在Java编程中,MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,能够将任意长度的数据转化为固定长度的摘要表示,通常用于验证文件的完整性和一致性。本示例代码是关于如何使用Java来计算文件的MD5哈希...
这种方法不仅可以用于验证文件的一致性,还可以用于简单场景下的数据校验。尽管MD5存在一定的安全风险,但在非敏感信息处理方面仍然具有很高的实用价值。在实际开发过程中,可以根据需求选择更安全的哈希算法如SHA-...
在这个场景中,我们有一个名为“mymd5”的压缩包文件,它很可能包含了一个Android应用或库,用于计算和验证文件的MD5值。下面将详细介绍Android环境下如何实现文件的MD5验证。 首先,我们需要理解MD5的基本原理。MD...
2. **文件校验**:可以计算文件的MD5值,作为文件的指纹,用于验证文件是否完整或被篡改。 3. **数据一致性检查**:在网络传输数据时,接收方可以通过计算接收到的数据的MD5值与发送方提供的值进行比较,确认数据在...
### 解决Java与C# MD5不一致问题 在软件开发过程中,经常需要对数据进行加密处理以确保数据的安全性和一致性。MD5是一种常用的哈希算法,被广泛应用于各种场景中,如密码加密、文件校验等。但在跨平台或多语言环境...
由于MD5的不可逆性,常用于验证文件完整性。 2. **Java中的MD5加密**:在Java中,可以使用`java.security.MessageDigest`类来实现MD5加密。首先,需要创建一个MD5实例,然后更新要加密的字节数组,最后获取并转换成...
在标题"Md5.java.rar_MD5 JAVA_MD5.ja_java md5_md5_md5 java realization"中,我们可以推测这个压缩包包含了一个名为"Md5.java"的源代码文件,这是一个实现了MD5算法的Java类。MD5 JAVA可能指的是这个Java实现是...
在文件传输中,MD5通常用于验证文件的完整性。发送方在发送前先计算文件的MD5摘要,接收方接收到文件后也计算一次,如果两个摘要相同,说明文件在传输过程中没有被篡改。 RSA是一种非对称加密算法,它有公钥和私钥...
Java MD5 Check Tool 是一个基于Java开发的工具,主要用于计算文件的MD5校验和,以便验证文件的完整性和一致性。MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它能够将任意长度的数据转化为固定长度...
在信息安全领域,MD5经常被用来验证文件的完整性和一致性。 Java Swing是Java的标准GUI库,用于创建桌面应用程序。它提供了丰富的组件集,包括按钮、文本框、面板等,使得开发者可以构建功能完善的用户界面。在Java...
在提供的文件名“MD5”中,可能包含的是一个文件的MD5摘要列表,用于验证解压后的文件是否与原始文件一致。用户可以使用MD5工具对比压缩包内的文件和解压后的文件的MD5值,如果两者匹配,说明文件在解压过程中没有...
MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,可以将任意长度的数据转换为固定...如果你需要了解更多关于DES的信息,它是一种对称加密算法,通常用于保护数据的安全,而MD5主要用于验证数据完整性。
这个过程是不可逆的,即无法从MD5码还原原始数据,但相同的输入会产生相同的MD5码,这使得MD5码成为验证文件是否被篡改的有效手段。在Java中,`java.security.MessageDigest`类提供了MD5算法的支持,开发者可以通过...
任何一个文件,无论是可执行程序、图像文件、临时文件或者其他任何类型的文件,也不管它体积多大,都有且只有一个独一无二的MD5信息值,并且如果这个文件被修改过,它的MD5值也将随之改变。因此,我们可以通过对比...
6. **MD5的应用**:在Java中,MD5常用于验证文件完整性,比如下载文件后检查MD5值是否与原始文件一致。此外,过去也曾用于密码存储,但现在通常会使用更安全的哈希算法如SHA-256,并配合盐值和迭代次数增加安全性。 ...
此外,MD5也常用于验证文件的完整性。通过计算文件的MD5摘要,可以确保在传输或存储过程中文件未被篡改。例如,下载大文件时,服务端会提供文件的MD5值,用户下载后可以自行计算文件的MD5并与之对比,确保文件的正确...
MD5,全称为Message-Digest ...虽然MD5的安全性已经不如以前,但它仍然是验证文件完整性和快速比较数据的有效手段。同时,`CalcMD5.exe`这样的工具可以帮助开发者和用户快速获取文件的MD5值,以进行一致性检查。
下面是一个简单的Java MD5加密的代码示例,对应于你提供的`TestMD5.java`文件: ```java import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class TestMD5 { public ...
由于MD5碰撞攻击(即找到两个不同的输入产生相同MD5值的情况)的发现,MD5的安全性已大打折扣。现代密码学推荐使用更安全的哈希函数,如SHA-256或bcrypt,来保护用户的密码。 在`encrypt`这个文件夹中,可能包含了...