<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FSecurity%2FCheck_sum</id>
		<title>Java/Security/Check sum - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FSecurity%2FCheck_sum"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Security/Check_sum&amp;action=history"/>
		<updated>2026-04-21T20:35:57Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/Security/Check_sum&amp;diff=7641&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Security/Check_sum&amp;diff=7641&amp;oldid=prev"/>
				<updated>2010-06-01T06:49:21Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 06:49, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/Security/Check_sum&amp;diff=7640&amp;oldid=prev</id>
		<title> в 18:01, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Security/Check_sum&amp;diff=7640&amp;oldid=prev"/>
				<updated>2010-05-31T18:01:45Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Check Sum and MD5 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
/*&lt;br /&gt;
 *************************************************************************&lt;br /&gt;
 * The contents of this file are subject to the Openbravo  Public  License&lt;br /&gt;
 * Version  1.0  (the  &amp;quot;License&amp;quot;),  being   the  Mozilla   Public  License&lt;br /&gt;
 * Version 1.1  with a permitted attribution clause; you may not  use this&lt;br /&gt;
 * file except in compliance with the License. You  may  obtain  a copy of&lt;br /&gt;
 * the License at http://www.openbravo.ru/legal/license.html &lt;br /&gt;
 * Software distributed under the License  is  distributed  on  an &amp;quot;AS IS&amp;quot;&lt;br /&gt;
 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the&lt;br /&gt;
 * License for the specific  language  governing  rights  and  limitations&lt;br /&gt;
 * under the License. &lt;br /&gt;
 * The Original Code is Openbravo ERP. &lt;br /&gt;
 * The Initial Developer of the Original Code is Openbravo SL &lt;br /&gt;
 * All portions are Copyright (C) 2009 Openbravo SL &lt;br /&gt;
 * All Rights Reserved. &lt;br /&gt;
 * Contributor(s):  ______________________________________.&lt;br /&gt;
 ************************************************************************&lt;br /&gt;
 */&lt;br /&gt;
import java.io.File;&lt;br /&gt;
import java.io.FileInputStream;&lt;br /&gt;
import java.io.FileOutputStream;&lt;br /&gt;
import java.io.FilenameFilter;&lt;br /&gt;
import java.math.BigInteger;&lt;br /&gt;
import java.security.MessageDigest;&lt;br /&gt;
import java.util.Properties;&lt;br /&gt;
public class CheckSum {&lt;br /&gt;
  private String obDir;&lt;br /&gt;
  private Properties properties;&lt;br /&gt;
  public CheckSum(String dir) {&lt;br /&gt;
    obDir = dir.replace(&amp;quot;\\&amp;quot;, &amp;quot;/&amp;quot;);&lt;br /&gt;
    if (!obDir.endsWith(&amp;quot;/&amp;quot;))&lt;br /&gt;
      obDir += &amp;quot;/&amp;quot;;&lt;br /&gt;
    properties = new Properties();&lt;br /&gt;
    File propertiesFile = new File(obDir + &amp;quot;/config/checksums&amp;quot;);&lt;br /&gt;
    if (propertiesFile.exists()) {&lt;br /&gt;
      try {&lt;br /&gt;
        properties.load(new FileInputStream(propertiesFile));&lt;br /&gt;
      } catch (Exception e) {&lt;br /&gt;
        // do nothing, just do not read properties&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  private void getCheckSum(MessageDigest cs, File f) throws Exception {&lt;br /&gt;
    if (f.isDirectory()) {&lt;br /&gt;
      File[] list = f.listFiles(new FilenameFilter() {&lt;br /&gt;
        public boolean accept(File file, String s) {&lt;br /&gt;
          return !s.equals(&amp;quot;.svn&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
      });&lt;br /&gt;
      for (File element : list)&lt;br /&gt;
        getCheckSum(cs, element);&lt;br /&gt;
    } else {&lt;br /&gt;
      FileInputStream is = new FileInputStream(f);&lt;br /&gt;
      byte[] bytes = new byte[1024];&lt;br /&gt;
      int len = 0;&lt;br /&gt;
      // Checksum file directly&lt;br /&gt;
      while ((len = is.read(bytes)) &amp;gt;= 0) {&lt;br /&gt;
        cs.update(bytes, 0, len);&lt;br /&gt;
      }&lt;br /&gt;
      is.close();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  private String getCheckSum(String[] files) throws Exception {&lt;br /&gt;
    MessageDigest cs = MessageDigest.getInstance(&amp;quot;MD5&amp;quot;);&lt;br /&gt;
    for (String fileName : files) {&lt;br /&gt;
      File file = new File(fileName);&lt;br /&gt;
      if (file.exists())&lt;br /&gt;
        getCheckSum(cs, file);&lt;br /&gt;
    }&lt;br /&gt;
    return new BigInteger(1, cs.digest()).toString(16);&lt;br /&gt;
  }&lt;br /&gt;
  private String[] getFiles(String type) {&lt;br /&gt;
    if (type.equals(&amp;quot;md5.db.structure&amp;quot;)) {&lt;br /&gt;
      String rt[] = { obDir + &amp;quot;src-db/database/model&amp;quot;, obDir + &amp;quot;modules&amp;quot; };&lt;br /&gt;
      return rt;&lt;br /&gt;
    } else if (type.equals(&amp;quot;md5.db.sourcedata&amp;quot;)) {&lt;br /&gt;
      String rt[] = { obDir + &amp;quot;src-db/database/sourcedata&amp;quot;, obDir + &amp;quot;modules&amp;quot; };&lt;br /&gt;
      return rt;&lt;br /&gt;
    } else if (type.equals(&amp;quot;md5.wad&amp;quot;)) {&lt;br /&gt;
      String rt[] = { obDir + &amp;quot;src-wad/lib/openbravo-wad.jar&amp;quot; };&lt;br /&gt;
      return rt;&lt;br /&gt;
    } else if (type.equals(&amp;quot;md5.skins&amp;quot;)) {&lt;br /&gt;
      String rt[] = { obDir + &amp;quot;web/skins&amp;quot; };&lt;br /&gt;
      return rt;&lt;br /&gt;
    } else {&lt;br /&gt;
      String rt[] = new String[0];&lt;br /&gt;
      return rt;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  private void saveCheckSum() throws Exception {&lt;br /&gt;
    FileOutputStream file = new FileOutputStream(obDir + &amp;quot;/config/checksums&amp;quot;);&lt;br /&gt;
    properties.store(file, &amp;quot;Checksums for build tasks comparation&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public String calculateCheckSum(String type) {&lt;br /&gt;
    try {&lt;br /&gt;
      String[] files = getFiles(type);&lt;br /&gt;
      String checkSum = getCheckSum(files);&lt;br /&gt;
      properties.setProperty(type, checkSum);&lt;br /&gt;
      saveCheckSum();&lt;br /&gt;
      return checkSum;&lt;br /&gt;
    } catch (Exception e) {&lt;br /&gt;
      e.printStackTrace();&lt;br /&gt;
      return &amp;quot;0&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public String calculateCheckSumDBStructure() {&lt;br /&gt;
    return calculateCheckSum(&amp;quot;md5.db.structure&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public String calculateCheckSumDBSourceData() {&lt;br /&gt;
    return calculateCheckSum(&amp;quot;md5.db.sourcedata&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public String calculateCheckSumWad() {&lt;br /&gt;
    return calculateCheckSum(&amp;quot;md5.wad&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public String calculateCheckSkins() {&lt;br /&gt;
    return calculateCheckSum(&amp;quot;md5.sinks&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public String getCheckSumDBSTructure() {&lt;br /&gt;
    return properties.getProperty(&amp;quot;md5.db.structure&amp;quot;, &amp;quot;0&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public String getCheckSumDBSourceData() {&lt;br /&gt;
    return properties.getProperty(&amp;quot;md5.db.sourcedata&amp;quot;, &amp;quot;0&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public String getCheckSumWad() {&lt;br /&gt;
    return properties.getProperty(&amp;quot;md5.wad&amp;quot;, &amp;quot;0&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public String getCheckSum(String type) {&lt;br /&gt;
    return properties.getProperty(type, &amp;quot;0&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    CheckSum cs = new CheckSum(&amp;quot;/home/openbravo/ws/trunk/openbravo&amp;quot;);&lt;br /&gt;
    cs.calculateCheckSum(&amp;quot;md5.skins&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Generates md5-sums based on a string ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
import java.security.MessageDigest;&lt;br /&gt;
import java.security.DigestInputStream;&lt;br /&gt;
import java.io.InputStream;&lt;br /&gt;
import java.io.BufferedInputStream;&lt;br /&gt;
public class MD5Util {&lt;br /&gt;
    public static String computeMD5(String input) {&lt;br /&gt;
        MessageDigest digest;&lt;br /&gt;
        try {&lt;br /&gt;
            digest = MessageDigest.getInstance(&amp;quot;MD5&amp;quot;);&lt;br /&gt;
            digest.update(input.getBytes(&amp;quot;UTF-8&amp;quot;));&lt;br /&gt;
        } catch (Exception e) {&lt;br /&gt;
            throw new RuntimeException(e);&lt;br /&gt;
        }&lt;br /&gt;
        byte[] digestBytes = digest.digest();&lt;br /&gt;
        StringBuffer hexString = new StringBuffer();&lt;br /&gt;
        for (byte digestByte : digestBytes) {&lt;br /&gt;
            hexString.append(Integer.toHexString(0xFF &amp;amp; digestByte));&lt;br /&gt;
        }&lt;br /&gt;
        return hexString.toString();&lt;br /&gt;
    }&lt;br /&gt;
    public static String computeMD5(InputStream stream) {&lt;br /&gt;
        MessageDigest digest;&lt;br /&gt;
        try {&lt;br /&gt;
            digest = MessageDigest.getInstance(&amp;quot;MD5&amp;quot;);&lt;br /&gt;
            DigestInputStream digestStream = new DigestInputStream(stream, digest);&lt;br /&gt;
            while (digestStream.read() != -1) {&lt;br /&gt;
                ; //digest is updating&lt;br /&gt;
            }&lt;br /&gt;
        } catch (Exception e) {&lt;br /&gt;
            throw new RuntimeException(e);&lt;br /&gt;
        }&lt;br /&gt;
        byte[] digestBytes = digest.digest();&lt;br /&gt;
        StringBuffer hexString = new StringBuffer();&lt;br /&gt;
        for (byte digestByte : digestBytes) {&lt;br /&gt;
            hexString.append(Integer.toHexString(0xFF &amp;amp; digestByte));&lt;br /&gt;
        }&lt;br /&gt;
        return hexString.toString();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>