java 获取文件MD5值

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

Java代码  

  1. /** 
  2.      * Get MD5 of one file:hex string,test OK! 
  3.      *  
  4.      * @param file 
  5.      * @return 
  6.      */  
  7.     public static String getFileMD5(File file) {  
  8.         if (!file.exists() || !file.isFile()) {  
  9.             return null;  
  10.         }  
  11.         MessageDigest digest = null;  
  12.         FileInputStream in = null;  
  13.         byte buffer[] = new byte[1024];  
  14.         int len;  
  15.         try {  
  16.             digest = MessageDigest.getInstance("MD5");  
  17.             in = new FileInputStream(file);  
  18.             while ((len = in.read(buffer, 0, 1024)) != NEGATIVE_ONE) {  
  19.                 digest.update(buffer, 0, len);  
  20.             }  
  21.             in.close();  
  22.         } catch (Exception e) {  
  23.             e.printStackTrace();  
  24.             return null;  
  25.         }  
  26.         BigInteger bigInt = new BigInteger(1, digest.digest());  
  27.         return bigInt.toString(16);  
  28.     }  
  29.   
  30.     /*** 
  31.      * Get MD5 of one file!test ok! 
  32.      *  
  33.      * @param filepath 
  34.      * @return 
  35.      */  
  36.     public static String getFileMD5(String filepath) {  
  37.         File file = new File(filepath);  
  38.         return getFileMD5(file);  
  39.     }  
  40.   
  41.     /** 
  42.      * MD5 encrypt,test ok 
  43.      *  
  44.      * @param data 
  45.      * @return byte[] 
  46.      * @throws Exception 
  47.      */  
  48.     public static byte[] encryptMD5(byte[] data) throws Exception {  
  49.   
  50.         MessageDigest md5 = MessageDigest.getInstance(SystemUtil.KEY_MD5);  
  51.         md5.update(data);  
  52.         return md5.digest();  
  53.     }  
  54.   
  55.     public static byte[] encryptMD5(String data) throws Exception {  
  56.         return encryptMD5(data.getBytes(SystemUtil.CHARSET_ISO88591));  
  57.     }  
  58.     /*** 
  59.      * compare two file by Md5 
  60.      *  
  61.      * @param file1 
  62.      * @param file2 
  63.      * @return 
  64.      */  
  65.     public static boolean isSameMd5(File file1,File file2){  
  66.         String md5_1=SystemUtil.getFileMD5(file1);  
  67.         String md5_2=SystemUtil.getFileMD5(file2);  
  68.         return md5_1.equals(md5_2);  
  69.     }  
  70.     /*** 
  71.      * compare two file by Md5 
  72.      *  
  73.      * @param filepath1 
  74.      * @param filepath2 
  75.      * @return 
  76.      */  
  77.     public static boolean isSameMd5(String filepath1,String filepath2){  
  78.         File file1=new File(filepath1);  
  79.         File file2=new File(filepath2);  
  80.         return isSameMd5(file1, file2);  
  81.     }  

 测试(使用junit):

Java代码  

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

 

时间: 2024-08-01 06:48:18

java 获取文件MD5值的相关文章

Asp获取文件md5值

中介交易 SEO诊断 淘宝客 云主机 技术大厅 网上asp加密字符的MD5很多,也很普遍,但是对文件进行md5的确很少,因为受到asp语言本身的限制.我们知道字符串的md5可以对明文进行不可逆的加密,从而保证数据储存或者传送的安全性.同样的,对文件进行md5加密也是为了保证在网络传送时不被修改和校验,另外还有一个用途就是在个人站点里面的应用:可以保证上传的图片或文件具有唯一性.原理是,上传到服务器之后,同时在数据库中记录该上传文件的md5值,这样在下次传同样文件的时候,可以通过查询数据库是否是相

用asp获取文件md5值

网上asp加密字符的MD5很多,也很普遍,但是对文件进行md5的确很少,因为受到asp语言本身的限制.我们知道字符串的md5可以对明文进行不可逆的加密,从而保证数据储存或者传送的安全性.同样的,对文件进行md5加密也是为了保证在网络传送时不被修改和校验,另外还有一个用途就是在个人站点里面的应用:可以保证上传的图片或文件具有唯一性.原理是,上传到服务器之后,同时在数据库中记录该上传文件的md5值,这样在下次传同样文件的时候,可以通过查询数据库是否是相同的文件,md5值相同,我们就认为它是相同的文件

用c 获取文件MD5值的实现方法_C 语言

网上有 md5.c , md5.h, 但是里面只有 MD5Init(), MD5Update(), MD5Final() 三个函数, 只可以直接对字符进行操作, 而没有直接求文件md5的接口. 以下是我的实现, 可计算32位和16位的md5值. 复制代码 代码如下: #include <stdio.h>#include <stdlib.h>#include <string.h>#include "md5.h"char *MD5_file (char

VBS获取文件MD5值(无组件)_vbs

下面这个代码不需要组件一样可以获取MD5值. 复制代码 代码如下: Option ExplicitDim wiDim fileDim file_sizeDim file_attributesDim file_versionDim file_hashSet wi = CreateObject("WindowsInstaller.Installer")file = "111.exe"file_size = wi.FileSize(file)file_attributes

文件上传-webuploader传递文件MD5值的问题,高手速来。

问题描述 webuploader传递文件MD5值的问题,高手速来. 为什么 Uploader.Register方法报错,undifind,不能识别...求救,webuploader如何传递文件的MD5值....如果有JAVA大文件分片上传的DEMO,感激不尽,可以金钱交换..有意联系,QQ510080612 解决方案 http://download.csdn.net/download/chaoloveyou/587998http://download.csdn.net/download/u010

Python获取文件ssdeep值的方法_python

本文实例讲述了Python获取文件ssdeep值的方法,分享给大家供大家参考.具体方法如下: 首先,得到ssdeep值,需要先import ssdeep 在ubuntu上安装pyssdeep时 一直出错  后来发现apt-cache search "ssdeep"时把几个全apt-get install 上,但问题依旧. 后来下载到pyssdeep的源文件 ,tar zxvf pyssdeep.tar.zip 然后 apt-get install python-dev 然后 pytho

JAVA获取文件绝对路径的方法_java

本文实例讲述了JAVA获取文件绝对路径的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: /** * 获取一个类的class文件所在的绝对路径. 这个类可以是JDK自身的类,也可以是用户自定义的类,或者是第三方开发包里的类. * 只要是在本程序中可以被加载的类,都可以定位到它的class文件的绝对路径. * * @param cls *            一个对象的Class属性 * @return 这个类的class文件位置的绝对路径. 如果没有这个类的定义,则返回nu

通过Nginx服务器获取大文件MD5值的配置方法_nginx

HTTP协议新增了Content-MD5 HTTP头,但是nginx并不支持这个功能,而且官方也明确表示不会增加这项功能,为什么呢?因为每次请求都需要读取整个文件来计算MD5值,以性能著称的nginx绝对不愿意干出违背软件宗旨的事情.但是有些应用中,需要验证文件的正确性,有些人通过下载当前文件,然后计算MD5值来比对当前文件是否正确.不仅仅浪费带宽资源也浪费了大把的时间.有需求就有解决方案,网友开发了file-md5模块.1. 下载模块file-md5 # cd /usr/local/src #

linux shell 获取文件md5的命令

获取文件的MD5值: $ md5sum linuxmint-12-gnome-dvd-32bit.iso|cut -d ' ' -f1 得到的MD5值 : ee3d6e2ca498bc7685b7f17cdb5f2eea 使用MD5校验iso文件: $ md5sum linuxmint-12-gnome-dvd-32bit.iso >linuxmint-12-gnome-dvd-32bit.md5 注意linuxmint-12-gnome-dvd-32bit.md5的内容是: ef3d6e2ca