`
x7700
  • 浏览: 55455 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

JAVA MD5 验证大文件(改)

阅读更多
从网上找的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);
	}
	
	
}

分享到:
评论
2 楼 逆风翔 2015-07-30  
700000000 bytes are about 670M  为毛是这个数字?
1 楼 zdzyh1989 2011-01-11  
我用了 1.60 GB (1,725,723,821 字节) 的一个高清电影文件作了试验,报异常“存储空间不足 无法处理此命令”,

相关推荐

    java MD5验证

    ### Java MD5验证知识点 #### 一、MD5概述 MD5(Message-Digest Algorithm 5)是一种广泛使用的散列算法,它能够将任意长度的数据转换为一个固定长度(通常是128位)的十六进制字符串。这种转换通常被称为散列值或...

    java源码 java 获取文件md5值(用于检测文件完整性) 2018127

    在Java编程中,MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,能够将任意长度的数据转化为固定长度的摘要表示,通常用于验证文件的完整性和一致性。本示例代码是关于如何使用Java来计算文件的MD5哈希...

    JAVA_对文件MD5加密

    这种方法不仅可以用于验证文件的一致性,还可以用于简单场景下的数据校验。尽管MD5存在一定的安全风险,但在非敏感信息处理方面仍然具有很高的实用价值。在实际开发过程中,可以根据需求选择更安全的哈希算法如SHA-...

    android对文件的MD5验证

    在这个场景中,我们有一个名为“mymd5”的压缩包文件,它很可能包含了一个Android应用或库,用于计算和验证文件的MD5值。下面将详细介绍Android环境下如何实现文件的MD5验证。 首先,我们需要理解MD5的基本原理。MD...

    java MD5加密工具类

    2. **文件校验**:可以计算文件的MD5值,作为文件的指纹,用于验证文件是否完整或被篡改。 3. **数据一致性检查**:在网络传输数据时,接收方可以通过计算接收到的数据的MD5值与发送方提供的值进行比较,确认数据在...

    解决java 与C# MD5 不一致问题 代码

    ### 解决Java与C# MD5不一致问题 在软件开发过程中,经常需要对数据进行加密处理以确保数据的安全性和一致性。MD5是一种常用的哈希算法,被广泛应用于各种场景中,如密码加密、文件校验等。但在跨平台或多语言环境...

    java 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.rar_MD5 JAVA_MD5.ja_java md5_md5_md5 java realization"中,我们可以推测这个压缩包包含了一个名为"Md5.java"的源代码文件,这是一个实现了MD5算法的Java类。MD5 JAVA可能指的是这个Java实现是...

    Java语言实现的md5,rsa算法传送文件

    在文件传输中,MD5通常用于验证文件的完整性。发送方在发送前先计算文件的MD5摘要,接收方接收到文件后也计算一次,如果两个摘要相同,说明文件在传输过程中没有被篡改。 RSA是一种非对称加密算法,它有公钥和私钥...

    java md5 check tool

    Java MD5 Check Tool 是一个基于Java开发的工具,主要用于计算文件的MD5校验和,以便验证文件的完整性和一致性。MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它能够将任意长度的数据转化为固定长度...

    JavaSwing文件Md5值计算器

    在信息安全领域,MD5经常被用来验证文件的完整性和一致性。 Java Swing是Java的标准GUI库,用于创建桌面应用程序。它提供了丰富的组件集,包括按钮、文本框、面板等,使得开发者可以构建功能完善的用户界面。在Java...

    java MD5加密解密

    在提供的文件名“MD5”中,可能包含的是一个文件的MD5摘要列表,用于验证解压后的文件是否与原始文件一致。用户可以使用MD5工具对比压缩包内的文件和解压后的文件的MD5值,如果两者匹配,说明文件在解压过程中没有...

    JAVA代码实现MD5编码

    MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,可以将任意长度的数据转换为固定...如果你需要了解更多关于DES的信息,它是一种对称加密算法,通常用于保护数据的安全,而MD5主要用于验证数据完整性。

    java写的 文件MD5码计算工具 及源码

    这个过程是不可逆的,即无法从MD5码还原原始数据,但相同的输入会产生相同的MD5码,这使得MD5码成为验证文件是否被篡改的有效手段。在Java中,`java.security.MessageDigest`类提供了MD5算法的支持,开发者可以通过...

    数字签名验证(MD5工具)

    任何一个文件,无论是可执行程序、图像文件、临时文件或者其他任何类型的文件,也不管它体积多大,都有且只有一个独一无二的MD5信息值,并且如果这个文件被修改过,它的MD5值也将随之改变。因此,我们可以通过对比...

    java实现MD5加密算法

    6. **MD5的应用**:在Java中,MD5常用于验证文件完整性,比如下载文件后检查MD5值是否与原始文件一致。此外,过去也曾用于密码存储,但现在通常会使用更安全的哈希算法如SHA-256,并配合盐值和迭代次数增加安全性。 ...

    md5 java 应用

    此外,MD5也常用于验证文件的完整性。通过计算文件的MD5摘要,可以确保在传输或存储过程中文件未被篡改。例如,下载大文件时,服务端会提供文件的MD5值,用户下载后可以自行计算文件的MD5并与之对比,确保文件的正确...

    md5java代码+md5工具

    MD5,全称为Message-Digest ...虽然MD5的安全性已经不如以前,但它仍然是验证文件完整性和快速比较数据的有效手段。同时,`CalcMD5.exe`这样的工具可以帮助开发者和用户快速获取文件的MD5值,以进行一致性检查。

    java MD5加密 实例 例子

    下面是一个简单的Java MD5加密的代码示例,对应于你提供的`TestMD5.java`文件: ```java import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class TestMD5 { public ...

    JAVA中MD5加密

    由于MD5碰撞攻击(即找到两个不同的输入产生相同MD5值的情况)的发现,MD5的安全性已大打折扣。现代密码学推荐使用更安全的哈希函数,如SHA-256或bcrypt,来保护用户的密码。 在`encrypt`这个文件夹中,可能包含了...

Global site tag (gtag.js) - Google Analytics