`

java 获取文件MD5值

阅读更多

java 中,如何获取文件的MD5值呢?如何比较两个文件是否完全相同呢?

/**
	 * Get MD5 of one file:hex string,test OK!
	 * 
	 * @param file
	 * @return
	 */
	public static String getFileMD5(File file) {
		if (!file.exists() || !file.isFile()) {
			return null;
		}
		MessageDigest digest = null;
		FileInputStream in = null;
		byte buffer[] = new byte[1024];
		int len;
		try {
			digest = MessageDigest.getInstance("MD5");
			in = new FileInputStream(file);
			while ((len = in.read(buffer, 0, 1024)) != NEGATIVE_ONE) {
				digest.update(buffer, 0, len);
			}
			in.close();
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
		BigInteger bigInt = new BigInteger(1, digest.digest());
		return bigInt.toString(16);
	}

	/***
	 * Get MD5 of one file!test ok!
	 * 
	 * @param filepath
	 * @return
	 */
	public static String getFileMD5(String filepath) {
		File file = new File(filepath);
		return getFileMD5(file);
	}

	/**
	 * MD5 encrypt,test ok
	 * 
	 * @param data
	 * @return byte[]
	 * @throws Exception
	 */
	public static byte[] encryptMD5(byte[] data) throws Exception {

		MessageDigest md5 = MessageDigest.getInstance(SystemUtil.KEY_MD5);
		md5.update(data);
		return md5.digest();
	}

	public static byte[] encryptMD5(String data) throws Exception {
		return encryptMD5(data.getBytes(SystemUtil.CHARSET_ISO88591));
	}
	/***
	 * compare two file by Md5
	 * 
	 * @param file1
	 * @param file2
	 * @return
	 */
	public static boolean isSameMd5(File file1,File file2){
		String md5_1=SystemUtil.getFileMD5(file1);
		String md5_2=SystemUtil.getFileMD5(file2);
		return md5_1.equals(md5_2);
	}
	/***
	 * compare two file by Md5
	 * 
	 * @param filepath1
	 * @param filepath2
	 * @return
	 */
	public static boolean isSameMd5(String filepath1,String filepath2){
		File file1=new File(filepath1);
		File file2=new File(filepath2);
		return isSameMd5(file1, file2);
	}

 测试(使用junit):

@Test
	public void test_getFileMD5() throws Exception{
		String filepath="D:\\download\\3_尚学堂_UML概览.avi";
//		File file=new File(filepath);
		String md5_1=SystemUtil.getFileMD5(filepath);
		System.out.println(md5_1);
		
		byte[]bytes=FileUtils.readBytes4file(filepath);
		byte[]md5=SystemUtil.encryptMD5(bytes);
		String md5_2=SystemUtil.toHexString(md5);
		System.out.println(md5_2);
		Assert.assertEquals(md5_1, md5_2);
	}

 

分享到:
评论
12 楼 3344606096 2018-02-04  
6ee55e422428f6c8e502747c12d9fffe
11 楼 hw1287789687 2017-12-16  
gmxy 写道
a116475939 写道
指正一个错误:
BigInteger bigInt = new BigInteger(1, digest.digest());

此处如果获取的md5是以0开头的,
那么bigInt将变成没有0的15位。

有什么解决办法吗

谢谢!
已修正:
 /**
     * Get MD5 of one file:hex string,test OK!
     *
     * @param file
     * @return : hex string
     */
    public static String getFileMD5(File file) {
        if (!file.exists() || !file.isFile()) {
            return null;
        }
        MessageDigest digest = null;
        FileInputStream in = null;
        byte buffer[] = new byte[1024];
        int len;
        try {
            digest = MessageDigest.getInstance("MD5");
            in = new FileInputStream(file);
            while ((len = in.read(buffer, 0, 1024)) != NEGATIVE_ONE) {
                digest.update(buffer, 0, len);
            }
            in.close();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
//        BigInteger bigInt = new BigInteger(1, digest.digest());
        return SystemHWUtil.toHexString(digest.digest());// bigInt.toString(16);
    }


toHexString 方法见SystemUtil
中,也可以参考 https://github.com/liuyu520/io0007 中的com/common/util/SystemHWUtil.java
10 楼 gmxy 2017-11-23  
a116475939 写道
指正一个错误:
BigInteger bigInt = new BigInteger(1, digest.digest());

此处如果获取的md5是以0开头的,
那么bigInt将变成没有0的15位。

有什么解决办法吗
9 楼 a116475939 2017-09-22  
指正一个错误:
BigInteger bigInt = new BigInteger(1, digest.digest());

此处如果获取的md5是以0开头的,
那么bigInt将变成没有0的15位。
8 楼 leandzgc 2017-01-16  
支持支持支持!!!很厉害!!!被人盗链到阿里云上面了,很尴尬!!!
7 楼 hw1287789687 2014-08-27  

com.io.hw.file.util.FileUtils;
com.String.widget.util.ValueWidget
com.time.util.TimeHWUtil
下载地址:http://pan.baidu.com/s/1o6LoNrk

http://www.yunmasoft.com
6 楼 huangjnjavaIt 2014-08-18  
hw1287789687 写道
huangjnjavaIt 写道
楼主,你好,systemUtil.java中引用的其他文件能否提供一下呢?

什么文件?说具体点

com.io.hw.file.util.FileUtils;
com.String.widget.util.ValueWidget
com.time.util.TimeHWUtil
这三个文件
5 楼 hw1287789687 2014-08-17  
huangjnjavaIt 写道
楼主,你好,systemUtil.java中引用的其他文件能否提供一下呢?

什么文件?说具体点
4 楼 huangjnjavaIt 2014-08-16  
楼主,你好,systemUtil.java中引用的其他文件能否提供一下呢?
3 楼 hw1287789687 2014-03-13  
foolkeeper 写道
NEGATIVE_ONE 没有定义,是啥值?

NEGATIVE_ONE的值是-1
2 楼 foolkeeper 2014-03-13  
原来在下载里
1 楼 foolkeeper 2014-03-13  
NEGATIVE_ONE 没有定义,是啥值?

相关推荐

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

    以下是一个简单的Java源码示例,展示了如何获取文件的MD5值: ```java import java.io.FileInputStream; import java.io.IOException; import java.security.MessageDigest; import java.security....

    Java计算文件MD5值(支持大文件)

    Java计算文件MD5值(支持大文件) package com.hthl.xxtd; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.security.MessageDigest; import org....

    JavaSwing文件Md5值计算器

    JavaSwing文件Md5值计算器是一款基于Java Swing开发的实用工具,主要用于计算文件的MD5哈希值。MD5(Message-Digest Algorithm 5)是一种广泛使用的加密散列函数,产生一个128位(16字节)的散列值,通常用32个十六...

    JAVA_对文件MD5加密

    ### JAVA_对文件进行MD5加密 在计算机科学与信息安全领域中,MD5(Message-Digest Algorithm 5)是一种广泛使用的散列函数,能够将任意长度的数据映射为一个固定长度(通常是128位)的十六进制数值。这种算法在数据...

    java 源代码 软件 获得文件的MD5值

    java源码,用来获得文件的MD5,如果电脑上没有MD5软件,可以用这个,一运行就知道MD5值是多少。 略作修改即可计算字符串的MD5值。

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

    本文将详细介绍如何解决Java与C#中MD5哈希值不一致的问题,并提供相应的代码示例。 #### 一、MD5算法简介 MD5(Message-Digest Algorithm 5)是RSA数据安全公司设计并发布的一种散列函数,它能够接收任意长度的...

    获取目录下所有文件和文件夹,并计算其MD5值,两个文件夹比较,得出被篡改的目录路径

    计算MD5值可以使用Java的`java.security.MessageDigest`类,先创建MD5实例,然后读取文件内容,每次读取一小部分,更新MD5摘要,最后得到完整的MD5值。 比较两个文件夹的内容时,可以将每个文件或子目录的路径和...

    java调用MD5加密方式计算摘要值(有界面)

    在提供的"MessageSecurity"文件中,可能包含了一个具有图形用户界面(GUI)的Java应用程序,该程序允许用户输入文本并显示其MD5摘要值。这可能是为了教学目的,让用户直观地理解MD5加密的过程。这样的界面通常会包含...

    一个比较好用的md5计算工具

    这个“一个比较好用的md5计算工具”很可能是一个名为“MD5Summer”的应用程序,提供计算文件MD5值的功能。MD5Summer.exe很可能是该工具的可执行文件,用户下载后可以直接运行。下面我们将详细探讨MD5计算工具和MD5...

    java中文件的MD5和SHA-1的使用

    在计算文件的 MD5 值时,需要使用 MessageDigest 类的 getInstance 静态方法来获取 MessageDigest 对象,并将参数设置为 "MD5"。然后,使用 FileInputStream 读取文件的内容,并将其传递给 MessageDigest 对象的 ...

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

    Java作为一种多平台通用的编程语言,提供了计算文件MD5码的功能。本项目就是一个基于Java编写的文件MD5码计算工具,使用NetBeans作为集成开发环境(IDE)进行开发。 首先,MD5码的计算原理是通过特定算法将输入的...

    md5java代码+md5工具

    MD5,全称为Message-Digest Algorithm 5,是一种广泛用于数据完整性校验和加密的哈希函数。在Java编程中,MD5常被用来...同时,`CalcMD5.exe`这样的工具可以帮助开发者和用户快速获取文件的MD5值,以进行一致性检查。

    文件-AES-MD5-Upload-Minio工具类.zip

    MD5FileUtils可能提供了计算文件MD5校验和的函数,以便用户确认文件在传输过程中是否被篡改或损坏。 接下来,FileUploadUtil显然与文件上传有关,这可能是一个工具类,封装了文件上传到服务器的相关逻辑。这可能...

    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加密工具类

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

    java实现MD5加密算法

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

    jar包MD5加密包含用法

    6. **验证或比较MD5值**:你可以用同样的方式计算目标数据的MD5值,然后与已知的MD5值进行比较,以验证数据的完整性。 用法.txt文件很可能是提供关于如何在Java程序中使用JavaMD5.jar的详细指南,包括导入库、创建...

    java md5加密 解密

    服务器会提供文件的MD5校验和,客户端下载文件后计算其MD5值并与服务器提供的值比较,确保文件未在传输过程中受损。 总之,MD5在Java中主要用于数据的加密和完整性校验,但在当前安全需求下,应当考虑更安全的替代...

Global site tag (gtag.js) - Google Analytics