MainClass.java Source code

Java tutorial

Introduction

Here is the source code for MainClass.java

Source

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.DigestInputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.Provider;
import java.security.Security;
import java.util.zip.CRC32;

public class MainClass {
    static private String hexDigit(byte x) {
        StringBuffer sb = new StringBuffer();
        char c;
        // First nibble
        c = (char) ((x >> 4) & 0xf);
        if (c > 9) {
            c = (char) ((c - 10) + 'a');
        } else {
            c = (char) (c + '0');
        }
        sb.append(c);
        // Second nibble
        c = (char) (x & 0xf);
        if (c > 9) {
            c = (char) ((c - 10) + 'a');
        } else {
            c = (char) (c + '0');
        }
        sb.append(c);
        return sb.toString();
    }

    static private String computeDigest(MessageDigest algorithm, String filename) {
        String returnValue = "";
        try {
            algorithm.reset();
            FileInputStream fis = new FileInputStream(filename);
            BufferedInputStream bis = new BufferedInputStream(fis);
            DigestInputStream dis = new DigestInputStream(bis, algorithm);
            int ch;
            while ((ch = dis.read()) != -1)
                ;
            StringBuffer hexString = new StringBuffer();
            byte digest[] = algorithm.digest();
            int digestLength = digest.length;
            for (int i = 0; i < digestLength; i++) {
                hexString.append(hexDigit(digest[i]));
                hexString.append(" ");
            }
            returnValue = hexString.toString();
        } catch (IOException e) {
            System.err.println("Error generating digest for: " + filename);
        }
        return returnValue;
    }

    public static void main(String args[]) {
        MessageDigest algorithm = null;
        Security.addProvider(new MyProvider());
        try {
            algorithm = MessageDigest.getInstance("CRC32");
        } catch (NoSuchAlgorithmException e) {
            System.err.println("Invalid algorithm");
            System.exit(-1);
        }
        int argsLength = args.length;
        for (int i = 0; i < argsLength; i++) {
            String digest = computeDigest(algorithm, args[i]);
            System.out.println(args[i] + " : " + digest);

        }
    }
}

class MyProvider extends Provider {
    public MyProvider() {
        super("MyProvider", 1.0, "Java2s.com Collections Example");
        put("CRC32", "CRC");
    }
}

class CRC extends MessageDigest {
    CRC32 crc;

    public CRC() {
        super("CRC");
        crc = new CRC32();
    }

    protected void engineReset() {
        crc.reset();
    }

    protected void engineUpdate(byte input) {
        crc.update(input);
    }

    protected void engineUpdate(byte[] input, int offset, int len) {
        crc.update(input, offset, len);
    }

    protected byte[] engineDigest() {
        long l = crc.getValue();
        byte[] bytes = new byte[4];
        bytes[3] = (byte) ((l & 0xFF000000) >> 24);
        bytes[2] = (byte) ((l & 0x00FF0000) >> 16);
        bytes[1] = (byte) ((l & 0x0000FF00) >> 8);
        bytes[0] = (byte) ((l & 0x000000FF) >> 0);
        return bytes;
    }
}