java - 从 Java 计算文件 CheckSum 值

标签 java unix checksum

我正在尝试编写代码来生成与 UNIX cksum 命令生成的校验和值相同的校验和值。

当我在同一个文件上运行代码和命令时,我得到不同的值。

我的代码有什么问题吗?

package cksum;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.security.DigestInputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.zip.Adler32;
import java.util.zip.CRC32;
import java.util.zip.CheckedInputStream;

public class Cksum1 {
    public static void main(String[] args) throws NoSuchAlgorithmException, IOException {
        //MessageDigest md = MessageDigest.getInstance("MD5");
        String File = "C:\\Users\\admin\\Desktop\\logback XMLs\\STG_logback_Debug_All.xml";
        //String File = args[0];
        doChecksum32(File);
    }

    private static void doChecksum32(String fileName) {
        try {
            CheckedInputStream cis = null;
            long fileSize = 0;
            try {
                // Computer CRC32 checksum
                cis = new CheckedInputStream(
                        new FileInputStream(fileName), new CRC32());
                fileSize = new File(fileName).length();
            } catch (FileNotFoundException e) {
                System.err.println("File not found.");
                System.exit(1);
            }
            byte[] buf = new byte[128];
            while (cis.read(buf) >= 0) {
            }
            long checksum = cis.getChecksum().getValue();
            System.out.println(checksum + " " + fileSize + " " + fileName);
        } catch (IOException e) {
            e.printStackTrace();
            System.exit(1);
        }
    }

}

Java 输出:

run: 1478491164 8335 C:\Users\admin\Desktop\logback XMLs\STG_logback_Debug_All.xml BUILD SUCCESSFUL (total time: 0 seconds)

Unix 输出:

[tibroot@myserver ~]$ cksum ./STG_logback_Debug_All.xml 1715323814 8335 ./STG_logback_Debug_All.xml

最佳答案

cksum 的多项式为 0x04C11DB7

而jdk使用x^32 + x^26 ...

另请参阅 https://en.wikipedia.org/wiki/Cyclic_redundancy_check

关于java - 从 Java 计算文件 CheckSum 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55425731/

相关文章:

php - 用于文件检测的最佳哈希算法

Java Selenium 通过命令提示符 CMD Windows 运行,无需 IDE

java - Minecraft forge 自动设置 _JAVA_OPTIONS 环境变量

java - Java 接口(interface)的实现应该驻留在哪个包中?

linux - 对可以循环遍历值的变量执行 if 选择语句?

mysql - 哈希 MySQL 数据库模式

java - 帮助使用 Java 解决 D&D 迷宫

unix - cron 的问题

linux - 如何使 Unix 二进制文件自包含?

ruby - 在不下载完整文件的情况下,在 Ruby 中使用 Net::HTTP 将本地文件与校验和进行比较