View Javadoc

1   ////////////////////////////////////////////////////////////////////////////////
2   //CabaWeb
3   //Copyright (C) 2004  Thomas Vogt <Thomas.Vogt@TVC-Software.com>
4   //
5   //This library is free software; you can redistribute it and/or
6   //modify it under the terms of the GNU Lesser General Public
7   //License as published by the Free Software Foundation; either
8   //version 2.1 of the License, or (at your option) any later version.
9   //
10  //This library is distributed in the hope that it will be useful,
11  //but WITHOUT ANY WARRANTY; without even the implied warranty of
12  //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  //Lesser General Public License for more details.
14  //
15  //You should have received a copy of the GNU Lesser General Public
16  //License along with this library; if not, write to the Free Software
17  //Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18  ////////////////////////////////////////////////////////////////////////////////
19  
20  package org.fhw.cabaweb.tools;
21  
22  import java.util.Calendar;
23  import java.util.Date;
24  import java.util.Random;
25  
26  /***
27   * Klasse um verschiedene mit Passworten zusammenh&auml;ngende Funktionen zusammenzufassen
28   *
29   * @author	<a href="mailto:thomas.vogt@tvc-software.com">Thomas Vogt</a>
30   * @version	Version 1.0 10.03.2004
31   */
32  public final class Password
33  {
34      /***
35       * Standardkonstruktor der nicht zug&auml;nglich sein soll, da dies eine Utility Klasse ist
36       */
37      protected Password()
38      {
39          throw new UnsupportedOperationException(); // Aufrufe aus eventuellen SubKlassen verhindern
40      }
41  
42      /***
43       * Erzeugt ein Passwort im Raum [a-zA-Z0-9] von der &uuml;bergebenen L&auml;nge
44       *
45       * @param	laenge	L&auml;nge die das erzeugte Passwort haben soll
46       * @return	Der Passwort String
47       */
48      public static final String passwortGenerator(final int laenge)
49      {
50          String rueckgabewert = new String();
51  
52          String[] possible = { "a", "A", "b", "B", "c", "C", "d", "D", "e", "E", "f", "F", "g", "G", "h", "H", "i", "I", "j", "J", "k", "K", "l", "L", "m", "M", "n", "N", "o", "O", "p", "P", "q", "Q", "r", "R", "s", "S", "t", "T", "u", "U", "v", "V", "w", "W", "x", "X", "y", "Y", "z", "Z", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0" };
53  
54          int random_in = possible.length - 1;
55  
56          // Damit wenn man die Funktion zweimal hintereinander ausf&uuml;hrt nicht immer das gleicher herauskommt weil der Rechner so schnell ist
57          try
58          {
59              Thread.sleep(10);
60          }
61          catch (InterruptedException e)
62          {
63              ;
64          }
65  
66          Date timestamp = new Date();
67          Calendar calendar = Calendar.getInstance();
68          calendar.setTime(timestamp);
69          Random randomizer = new Random(calendar.getTimeInMillis());
70  
71          for (int count = 0; count < laenge; count++)
72          {
73              rueckgabewert = rueckgabewert.concat(possible[randomizer.nextInt(random_in)]);
74          }
75  
76          return rueckgabewert;
77      }
78  
79      /***
80       * Generiert aus dem &uuml;bergebenen String einen MD5 Hash
81       *
82       * @param	input	Der String aus dem ein MD5 Hash erzeugt werden soll
83       * @return	Der MD5 Hash
84       */
85      public static final String generateMD5(final String input)
86      {
87          MD5 md = new MD5();
88          byte[] out = new byte[16];
89          int len = 0;
90  
91          if (input == null)
92          {
93              try
94              {
95                  len = 0;
96                  md.update(null, 0);
97              }
98              catch (Exception ex)
99              {
100                 ;
101                 //				ex.printStackTrace();
102             }
103         }
104         else
105         {
106             try
107             {
108                 len = input.length();
109                 md.update(input.getBytes(), len);
110             }
111             catch (Exception ex)
112             {
113                 ;
114                 //				ex.printStackTrace();
115             }
116         }
117         md.md5final(out);
118 
119         return md.dumpBytes(out);
120     }
121 
122     /***
123      * Vergleich von 2 MD5 Hashes
124      *
125      * @param	hash1	Der String mit dem ersten MD5 Hash
126      * @param	hash2	Der String mit dem zweiten MD5 Hash
127      * @return	Boolean - true wenn beide Hashes gleich sind, ansonsten Boolean - false
128      */
129     public static final Boolean compareMD5Hashes(final String hash1, final String hash2)
130     {
131         if (hash1.compareTo(hash2) == 0)
132         {
133             return new Boolean(true);
134         }
135         else
136         {
137             return new Boolean(false);
138         }
139     }
140 
141     /***
142      * Vergleich des &uuml;bergebenen MD5 Hashes mit dem MD5 Hash der aus dem im Klartext &uuml;bergebenen String erzeugt wurde
143      *
144      * @param	hash	Der String mit dem MD5 Hash
145      * @param	input	Der String aus dem ein MD5 Hash erzeugt werden soll
146      * @return	Boolean - true wenn Hash und aus dem String erzeugter Hash gleich sind, ansonsten Boolean - false
147      */
148     public static final Boolean compareMD5HashToString(final String hash, final String input)
149     {
150         if (hash.compareTo(generateMD5(input)) == 0)
151         {
152             return new Boolean(true);
153         }
154         else
155         {
156             return new Boolean(false);
157         }
158     }
159 }