验证文件完整性

平时在网上下载文件时,有时会看到一个不规律的字符串(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");

    }

}

 

 

你可能感兴趣的:(java,apache,mysql,JUnit,Security)