Java Tutorial/Security/Digest Stream

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

Create a checksum

   <source lang="java">

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

 public static void main(String args[]) throws Exception {
   InputStream fis = new FileInputStream("a.exe");
   byte[] buffer = new byte[1024];
   MessageDigest complete = MessageDigest.getInstance("MD5");
   int numRead;
   do {
     numRead = fis.read(buffer);
     if (numRead > 0) {
       complete.update(buffer, 0, numRead);
     }
   } while (numRead != -1);
   fis.close();
   
   byte[] b = complete.digest();
   String result = "";
   for (int i = 0; i < b.length; i++) {
     result += Integer.toString((b[i] & 0xff) + 0x100, 16).substring(1);
   }
   System.out.println(result);
 }

}</source>





Cryptography Streams: True Mirror

   <source lang="java">

import java.io.InputStream; import java.net.URL; import java.security.MessageDigest; public class Main {

 public static void main(String[] args) throws Exception {
   URL source = new URL("http://www.a.ru");
   URL mirror = new URL("http://www.b.ru");
   byte[] sourceDigest = getDigestFromURL(source);
   byte[] mirrorDigest = getDigestFromURL(mirror);
   if (MessageDigest.isEqual(sourceDigest, mirrorDigest)) {
     System.out.println(mirror + " is up to date");
   } else {
     System.out.println(mirror + " needs to be updated");
   }
 }
 public static byte[] getDigestFromURL(URL u) throws Exception {
   MessageDigest md5 = MessageDigest.getInstance("MD5");
   InputStream in = u.openStream();
   byte[] data = new byte[1024];
   int bytesRead = -1;
   while ((bytesRead = in.read(data)) >= 0) {
     md5.update(data, 0, bytesRead);
   }
   return md5.digest();
 }

}</source>





Using DigestInputStream

   <source lang="java">

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

 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>