Java/Security/Check sum
Версия от 18:01, 31 мая 2010; (обсуждение)
Check Sum and MD5
/*
*************************************************************************
* 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");
}
}
Generates md5-sums based on a string
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();
}
}