我正在尝试编写代码来生成与 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 ...
关于java - 从 Java 计算文件 CheckSum 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55425731/