java 文件的hash值_Java计算文件的hash值

如何知道一个文件是否改变了呢?当然是用比较文件hash值的方法,文件hash又叫文件签名,文件中哪怕一个bit位被改变了,文件hash就会不同。

比较常用的文件hash算法有MD5和SHA-1。

我用的是MD5算法,java中,计算MD5可以用MessageDigest这个类。

下面提供两个工具类(任选其一即可)

第一个工具类:

代码如下:

package com.test;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.InputStream;

import java.math.BigInteger;

import java.security.MessageDigest;

public class MD5Util {

public static void main(String[] args) {

try {

//此处我测试的是我本机jdk源码文件的MD5值

String filePath = "C:\\Program Files\\Java\\jdk1.7.0_45\\src.zip";

String md5Hashcode = md5HashCode(filePath);

String md5Hashcode32 = md5HashCode32(filePath);

System.out.println(md5Hashcode + ":文件的md5值");

System.out.println(md5Hashcode32+":文件32位的md5值");

//System.out.println(-100 & 0xff);

} catch (FileNotFoundException e) {

e.printStackTrace();

}

}

/**

* 获取文件的md5值 ,有可能不是32位

* @param filePath文件路径

* @return

* @throws FileNotFoundException

*/

public static String md5HashCode(String filePath) throws FileNotFoundException{

FileInputStream fis = new FileInputStream(filePath);

return md5HashCode(fis);

}

/**

* 保证文件的MD5值为32位

* @param filePath文件路径

* @return

* @throws FileNotFoundException

*/

public static String md5HashCode32(String filePath) throws FileNotFoundException{

FileInputStream fis = new FileInputStream(filePath);

return md5HashCode32(fis);

}

/**

* java获取文件的md5值

* @param fis 输入流

* @return

*/

public static String md5HashCode(InputStream fis) {

try {

//拿到一个MD5转换器,如果想使用SHA-1或SHA-256,则传入SHA-1,SHA-256

MessageDigest md = MessageDigest.getInstance("MD5");

//分多次将一个文件读入,对于大型文件而言,比较推荐这种方式,占用内存比较少。

byte[] buffer = new byte[1024];

int

你可能感兴趣的:(java,文件的hash值)