用JAVA获取文件的MD5哈希码

获取文件的哈希码是一项常见的编程任务。MD5 是一种非常流行和常用的哈希算法。使用 Java 可以轻松获取文件的 MD5 哈希码,如下面的代码所示:

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.security.MessageDigest;

public class MD5file {
	public static String md5OfFile(File file) throws Exception {
		MessageDigest md = MessageDigest.getInstance("MD5");
		FileInputStream fs = new FileInputStream(file);
		BufferedInputStream bs = new BufferedInputStream(fs);
		byte[] buffer = new byte[1024];
		int bytesRead;

		while ((bytesRead = bs.read(buffer, 0, buffer.length)) != -1) {
			md.update(buffer, 0, bytesRead);
		}
		byte[] digest = md.digest();

		StringBuilder sb = new StringBuilder();
		for (byte bite : digest) {
			sb.append(String.format("%02x", bite & 0xff));
		}
		return sb.toString();
	}

	public static void main(String[] args) {
		File md5file = new File("f:\\Fedora-KDE-Live-x86_64-34-1.2.iso");
		try {
			String out = md5OfFile(md5file);
			System.out.println(out);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}

上面的代码做了几件事:

  • 创建一个MessageDigest最终会创建 MD5 哈希码的对象
  • 使用FileInputStreamBufferedInputStream缓冲来自文件的输入
  • 每读取 1024 个字节更新MessageDigest对象update()
  • 使用digest()方法返回文件的MD5哈希码
  • 将此 MD5 哈希码转换为十六进制格式
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5file2 {

	public static void main(String[] args) throws NoSuchAlgorithmException, IOException {
		File file = new File("f:\\Fedora-KDE-Live-x86_64-34-1.2.iso");

		MessageDigest md = MessageDigest.getInstance("MD5");
		FileInputStream fs = new FileInputStream(file);
		BufferedInputStream bs = new BufferedInputStream(fs);
		byte[] buffer = new byte[1024];
		int bytesRead;

		while ((bytesRead = bs.read(buffer, 0, buffer.length)) != -1) {
			md.update(buffer, 0, bytesRead);
		}
		byte[] digest = md.digest();

		StringBuilder sb = new StringBuilder();
		for (byte bite : digest) {
			sb.append(String.format("%02x", bite & 0xff));
		}
		System.out.println(sb.toString());

	}

}
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5file3 {

	public static void main(String[] args) {
		File file = new File("f:\\Fedora-KDE-Live-x86_64-34-1.2.iso");

		MessageDigest md = null;
		try {
			md = MessageDigest.getInstance("MD5");
		} catch (NoSuchAlgorithmException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		FileInputStream fs = null;
		try {
			fs = new FileInputStream(file);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		BufferedInputStream bs = new BufferedInputStream(fs);
		byte[] buffer = new byte[1024];
		int bytesRead;

		try {
			while ((bytesRead = bs.read(buffer, 0, buffer.length)) != -1) {
				md.update(buffer, 0, bytesRead);
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		byte[] digest = md.digest();

		StringBuilder sb = new StringBuilder();
		for (byte bite : digest) {
			sb.append(String.format("%02x", bite & 0xff));
		}
		System.out.println(sb.toString());

	}

}

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值