Java by API/java.security/MessageDigest

Материал из Java эксперт
Перейти к: навигация, поиск

extends MessageDigest

   <source lang="java">

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

}


 </source>
   
  
 
  



MessageDigest: getInstance(String algorithm)

   <source lang="java">

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

}


 </source>
   
  
 
  



MessageDigest: isEqual(byte[] digesta, byte[] digestb)

   <source lang="java">
 

import java.io.FileInputStream; import java.io.ObjectInputStream; import java.security.DigestInputStream; import java.security.MessageDigest; public class Main {

 public static void main(String args[]) throws Exception {
   FileInputStream fis = new FileInputStream("test");
   MessageDigest md = MessageDigest.getInstance("SHA");
   DigestInputStream dis = new DigestInputStream(fis, md);
   ObjectInputStream ois = new ObjectInputStream(dis);
   Object o = ois.readObject();
   if (!(o instanceof String)) {
     System.out.println("Unexpected data in file");
     System.exit(-1);
   }
   String data = (String) o;
   System.out.println("Got message " + data);
   dis.on(false);
   o = ois.readObject();
   if (!(o instanceof byte[])) {
     System.out.println("Unexpected data in file");
     System.exit(-1);
   }
   byte origDigest[] = (byte[]) o;
   System.out.println(MessageDigest.isEqual(md.digest(), origDigest));
 }

}


 </source>