Java/Security/Check sum

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

Check Sum and MD5

   <source lang="java">
 

/*

*************************************************************************
* The contents of this file are subject to the Openbravo  Public  License
* Version  1.0  (the  "License"),  being   the  Mozilla   Public  License
* Version 1.1  with a permitted attribution clause; you may not  use this
* file except in compliance with the License. You  may  obtain  a copy of
* the License at http://www.openbravo.ru/legal/license.html 
* Software distributed under the License  is  distributed  on  an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
* License for the specific  language  governing  rights  and  limitations
* under the License. 
* The Original Code is Openbravo ERP. 
* The Initial Developer of the Original Code is Openbravo SL 
* All portions are Copyright (C) 2009 Openbravo SL 
* All Rights Reserved. 
* Contributor(s):  ______________________________________.
************************************************************************
*/

import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FilenameFilter; import java.math.BigInteger; import java.security.MessageDigest; import java.util.Properties; public class CheckSum {

 private String obDir;
 private Properties properties;
 public CheckSum(String dir) {
   obDir = dir.replace("\\", "/");
   if (!obDir.endsWith("/"))
     obDir += "/";
   properties = new Properties();
   File propertiesFile = new File(obDir + "/config/checksums");
   if (propertiesFile.exists()) {
     try {
       properties.load(new FileInputStream(propertiesFile));
     } catch (Exception e) {
       // do nothing, just do not read properties
     }
   }
 }
 private void getCheckSum(MessageDigest cs, File f) throws Exception {
   if (f.isDirectory()) {
     File[] list = f.listFiles(new FilenameFilter() {
       public boolean accept(File file, String s) {
         return !s.equals(".svn");
       }
     });
     for (File element : list)
       getCheckSum(cs, element);
   } else {
     FileInputStream is = new FileInputStream(f);
     byte[] bytes = new byte[1024];
     int len = 0;
     // Checksum file directly
     while ((len = is.read(bytes)) >= 0) {
       cs.update(bytes, 0, len);
     }
     is.close();
   }
 }
 private String getCheckSum(String[] files) throws Exception {
   MessageDigest cs = MessageDigest.getInstance("MD5");
   for (String fileName : files) {
     File file = new File(fileName);
     if (file.exists())
       getCheckSum(cs, file);
   }
   return new BigInteger(1, cs.digest()).toString(16);
 }
 private String[] getFiles(String type) {
   if (type.equals("md5.db.structure")) {
     String rt[] = { obDir + "src-db/database/model", obDir + "modules" };
     return rt;
   } else if (type.equals("md5.db.sourcedata")) {
     String rt[] = { obDir + "src-db/database/sourcedata", obDir + "modules" };
     return rt;
   } else if (type.equals("md5.wad")) {
     String rt[] = { obDir + "src-wad/lib/openbravo-wad.jar" };
     return rt;
   } else if (type.equals("md5.skins")) {
     String rt[] = { obDir + "web/skins" };
     return rt;
   } else {
     String rt[] = new String[0];
     return rt;
   }
 }
 private void saveCheckSum() throws Exception {
   FileOutputStream file = new FileOutputStream(obDir + "/config/checksums");
   properties.store(file, "Checksums for build tasks comparation");
 }
 public String calculateCheckSum(String type) {
   try {
     String[] files = getFiles(type);
     String checkSum = getCheckSum(files);
     properties.setProperty(type, checkSum);
     saveCheckSum();
     return checkSum;
   } catch (Exception e) {
     e.printStackTrace();
     return "0";
   }
 }
 public String calculateCheckSumDBStructure() {
   return calculateCheckSum("md5.db.structure");
 }
 public String calculateCheckSumDBSourceData() {
   return calculateCheckSum("md5.db.sourcedata");
 }
 public String calculateCheckSumWad() {
   return calculateCheckSum("md5.wad");
 }
 public String calculateCheckSkins() {
   return calculateCheckSum("md5.sinks");
 }
 public String getCheckSumDBSTructure() {
   return properties.getProperty("md5.db.structure", "0");
 }
 public String getCheckSumDBSourceData() {
   return properties.getProperty("md5.db.sourcedata", "0");
 }
 public String getCheckSumWad() {
   return properties.getProperty("md5.wad", "0");
 }
 public String getCheckSum(String type) {
   return properties.getProperty(type, "0");
 }
 public static void main(String[] args) {
   CheckSum cs = new CheckSum("/home/openbravo/ws/trunk/openbravo");
   cs.calculateCheckSum("md5.skins");
 }

}


 </source>
   
  
 
  



Generates md5-sums based on a string

   <source lang="java">
 

import java.security.MessageDigest; import java.security.DigestInputStream; import java.io.InputStream; import java.io.BufferedInputStream; public class MD5Util {

   public static String computeMD5(String input) {
       MessageDigest digest;
       try {
           digest = MessageDigest.getInstance("MD5");
           digest.update(input.getBytes("UTF-8"));
       } catch (Exception e) {
           throw new RuntimeException(e);
       }
       byte[] digestBytes = digest.digest();
       StringBuffer hexString = new StringBuffer();
       for (byte digestByte : digestBytes) {
           hexString.append(Integer.toHexString(0xFF & digestByte));
       }
       return hexString.toString();
   }
   public static String computeMD5(InputStream stream) {
       MessageDigest digest;
       try {
           digest = MessageDigest.getInstance("MD5");
           DigestInputStream digestStream = new DigestInputStream(stream, digest);
           while (digestStream.read() != -1) {
               ; //digest is updating
           }
       } catch (Exception e) {
           throw new RuntimeException(e);
       }
       byte[] digestBytes = digest.digest();
       StringBuffer hexString = new StringBuffer();
       for (byte digestByte : digestBytes) {
           hexString.append(Integer.toHexString(0xFF & digestByte));
       }
       return hexString.toString();
   }

}


 </source>