用Java获取文件的MD5校验和

这篇博客讨论了如何在Java中计算文件的MD5校验和,包括使用Guava库、Apache Commons Codec、Java内置的MessageDigest类以及Java 7和9以后的NIO2 API等多种方法。示例代码展示了不同实现方式,并提到了CRC32和SHA哈希作为替代选择。
摘要由CSDN通过智能技术生成

我正在寻找使用Java获取文件的MD5校验和。 我真的很惊讶,但是我找不到任何能显示如何获取文件的MD5校验和的东西。

怎么做?


#1楼

Guava现在提供了一个新的,一致的哈希API,它比JDK中提供的各种哈希API更友好。 请参阅哈希说明 。 对于文件,您可以轻松获得MD5和,CRC32(版本14.0+)或许多其他哈希值:

HashCode md5 = Files.hash(file, Hashing.md5());
byte[] md5Bytes = md5.asBytes();
String md5Hex = md5.toString();

HashCode crc32 = Files.hash(file, Hashing.crc32());
int crc32Int = crc32.asInt();

// the Checksum API returns a long, but it's padded with 0s for 32-bit CRC
// this is the value you would get if using that API directly
long checksumResult = crc32.padToLong();

#2楼

public static void main(String[] args) throws Exception {
    MessageDigest md = MessageDigest.getInstance("MD5");
    FileInputStream fis = new FileInputStream("c:\\apache\\cxf.jar");

    byte[] dataBytes = new byte[1024];

    int nread = 0;
    while ((nread = fis.read(dataBytes)) != -1) {
        md.update(dataBytes, 0, nread);
    };
    byte[] mdbytes = md.digest();
    StringBuffer sb = new StringBuffer();
    for (int i = 0; i < mdbytes.length; i++) {
        sb.append(Integer.toString((mdbytes[i] & 0xff) + 0x100, 16).substring(1));
    }
    System.out.println("Digest(in hex format):: " + sb.toString());
}

或者您可能会获得更多信息http://www.asjava.com/core-java/java-md5-example/


#3楼

好。 我必须补充。 对于已经具有Spring和Apache Commons依赖项或计划添加它的人的一线实施:

DigestUtils.md5DigestAsHex(FileUtils.readFileToByteArray(file))

对于和仅Apache Commons选项(credit @duleshi):

DigestUtils.md5Hex(FileUtils.readFileToByteArray(file))

希望这对某人有帮助。


#4楼

标准Java运行时环境方式

public String checksum(File file) {
  try {
    InputStream fin = new FileInputStream(file);
    java.security.MessageDigest md5er =
        MessageDigest.getInstance("MD5");
    byte[] buffer = new byte[1024];
    int read;
    do {
      read = fin.read(buffer);
      if (read > 0)
        md5er.update(buffer, 0, read);
    } while (read != -1);
    fin.close();
    byte[] digest = md5er.digest();
    if (digest == null)
      return null;
    String strDigest = "0x";
    for (int i = 0; i < digest.length; i++) {
      strDigest += Integer.toString((digest[i] & 0xff) 
                + 0x100, 16).substring(1).toUpperCase();
    }
    return strDigest;
  } catch (Exception e) {
    return null;
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值