I am trying to write a code to generate the same Checksum value as generated by UNIX cksum command.
When I run my code and command on the same file, I am getting different values.
What is wrong with my code?
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 Output:
run: 1478491164 8335 C:\Users\admin\Desktop\logback XMLs\STG_logback_Debug_All.xml BUILD SUCCESSFUL (total time: 0 seconds)
Unix output:
[tibroot@myserver ~]$ cksum ./STG_logback_Debug_All.xml 1715323814 8335 ./STG_logback_Debug_All.xml