站长网 语言 Java 如何校验两个文件内容是同样的?

Java 如何校验两个文件内容是同样的?

如果两个文件的内容相同,那么它们的摘要应该是相同的。这个原理能不能帮助我们鉴定两个文件是否相同呢? Java实现文件摘要 带着这个疑问,我写了一个文件摘要提取工具类: /** * 提取文件 checksum * * @param path 文件全路径 * @param algorithm 算法名

如果两个文件的内容相同,那么它们的摘要应该是相同的。这个原理能不能帮助我们鉴定两个文件是否相同呢?
 
Java实现文件摘要
 
带着这个疑问,我写了一个文件摘要提取工具类:
 
/**
 * 提取文件 checksum  
 *
 * @param path      文件全路径
 * @param algorithm  算法名 例如 MD5、SHA-1、SHA-256等
 * @return  checksum
 * @throws NoSuchAlgorithmException the no such algorithm exception
 * @throws IOException              the io exception
 */
public static String extractChecksum(String path, String algorithm) throws NoSuchAlgorithmException, IOException {
    // 根据算法名称初始化摘要算法
    MessageDigest digest = MessageDigest.getInstance(algorithm);
    // 读取文件的所有比特
    byte[] fileBytes = Files.readAllBytes(Paths.get(path));
    // 摘要更新
    digest.update(fileBytes);
    //完成哈希摘要计算并返回特征值
    byte[] digested = digest.digest();
    // 进行十六进制的输出
    return HexUtils.toHexString(digested);
}
接下来做几组对照试验来证明猜想。
 
内容不变
 
首先要证明一个文件在内容不变的情况下摘要是否有变化,多次执行下面的代码,断言始终都是true。
 
String path = "C:\\Users\\s1\\IdeaProjects\\demo\\src\\main\\resources\\application.yml";
 
String checksum = extractChecksum(path, "SHA-1");
 
String hash = "6bf4d6c101b4a7821226d3ec1f8d778a531bf265";
 
Assertions.assertEquals(hash,checksum);
而且我把文件名改成application-dev.yml,甚至application-dev.txt摘要都是相同的。我又把yml文件的内容作了改动,断言就false了。这证明了单个文件的情况下,内容不变,hash是不变的。

本文来自网络,不代表站长网立场,转载请注明出处:https://www.tzzz.com.cn/html/biancheng/yuyan/2021/1206/33849.html

作者: dawei

【声明】:站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。
联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部