Mega Code Archive

 
Categories / Java by API / Java Security
 

Extends Provider

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, "rntsoft.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;   } }