验证文件完整性

平时在网上下载文件时,有时会看到一个不规律的字符串(MD5:609ff6b4db5c8dcb85728459705f4df4)。可以通过如下方法验证下载的文件是否未被修改过。

 

import java.io.File;

import java.io.FileInputStream;

import java.security.DigestInputStream;

import java.security.MessageDigest;

 

import org.apache.commons.codec.binary.Hex;

import org.apache.commons.codec.digest.DigestUtils;

import org.junit.Assert;

import org.junit.Test;

 

/**

 * 下载的文件为 mysql-essential-5.1.46-win32.msi

 * MD5值为 609ff6b4db5c8dcb85728459705f4df4

 */

public class MD5Test {

    /**

     * 使用Java API实现

     * @throws Exception

     */

    @Test

    public void testByMessageDigest() throws Exception {

       // 构建文件输入流

       FileInputStream fis = new FileInputStream(new File("D:\\mysql-essential-5.1.46-win32.msi"));

       // 初始化MessageDigest,并指定MD5算法

       DigestInputStream dis = new DigestInputStream(fis, MessageDigest.getInstance("MD5"));

       // 缓冲字节数组

       byte[] buffer = new byte[1024];

       // 当读到值大于-1就继续读

       int read = dis.read(buffer, 0, 1024);

       while (read > -1) {

           read = dis.read(buffer, 0, 1024);

       }

       // 关闭流

       dis.close();

       // 获得MessageDigest

       MessageDigest md = dis.getMessageDigest();

       // 摘要处理

       byte[] b = md.digest();

       // 十六进制转换

       String md5hex = Hex.encodeHexString(b);

       // 验证

       Assert.assertEquals(md5hex, "609ff6b4db5c8dcb85728459705f4df4");

    }

   

    /**

     * 使用Commons Codec实现

     * @throws Exception

     */

    @Test

    public void testByDigestUtils() throws Exception {

       // 构建文件输入流

       FileInputStream fis = new FileInputStream(new File("D:\\mysql-essential-5.1.46-win32.msi"));

       // 使用DigestUtilsMD5Hex处理

       String md5hex = DigestUtils.md5Hex(fis);

       // 关闭流

       fis.close();

       // 验证

       Assert.assertEquals(md5hex, "609ff6b4db5c8dcb85728459705f4df4");

    }

}

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值