View Javadoc
1   package com.jsql.util.bruter;
2   
3   import com.jsql.util.LogLevelUtil;
4   import org.apache.commons.lang3.StringUtils;
5   import org.apache.logging.log4j.LogManager;
6   import org.apache.logging.log4j.Logger;
7   
8   import java.nio.charset.StandardCharsets;
9   import java.security.NoSuchAlgorithmException;
10  
11  public class HashBruter extends Bruter {
12      
13      private static final Logger LOGGER = LogManager.getRootLogger();
14  
15      private String hash;
16      
17      private String generatedHash;
18      
19      private String password;
20      
21      private String type;
22  
23      public void tryBruteForce() {
24          this.starttime = System.nanoTime();
25          for (int size = this.minLength; size <= this.maxLength; size++) {
26              if (this.found || this.done) {
27                  break;
28              }
29              try {
30                  this.generateAllPossibleCombinations(StringUtils.EMPTY, size);
31              } catch (NoSuchAlgorithmException e) {
32                  LOGGER.log(LogLevelUtil.CONSOLE_JAVA, e, e);
33              }
34          }
35          this.done = true;
36      }
37  
38      private void generateAllPossibleCombinations(String baseString, int length) throws NoSuchAlgorithmException {
39          if (!this.found || !this.done) {
40              if (baseString.length() == length) {
41                  switch (this.type.toLowerCase()) {
42                      case "adler32": this.generatedHash = HashUtil.toAdler32(baseString); break;
43                      case "crc16":   this.generatedHash = Crc16Helper.generateCRC16(baseString); break;
44                      case "crc32":   this.generatedHash = HashUtil.toCrc32(baseString); break;
45                      case "crc64":   this.generatedHash = Crc64Helper.generateCRC64(baseString.getBytes(StandardCharsets.UTF_8)); break;
46                      case "mysql":   this.generatedHash = HashUtil.toMySql(baseString); break;
47                      case "md4":     this.generatedHash = HashUtil.toMd4(baseString); break;
48                      default:        this.generatedHash = HashUtil.toHash(this.type, baseString); break;
49                  }
50                  this.password = baseString;
51                  if (this.hash.equals(this.generatedHash)) {
52                      this.found = true;
53                      this.done = true;
54                  }
55                  this.count++;
56                  
57              } else if (baseString.length() < length) {
58                  for (String element: this.characters) {
59                      this.generateAllPossibleCombinations(baseString + element, length);
60                  }
61              }
62          }
63      }
64      
65      
66      // Getter and setter
67  
68      public String getPassword() {
69          return this.password;
70      }
71  
72      public void setHash(String hash) {
73          this.hash = hash;
74      }
75  
76      public void setType(String digestType) {
77          this.type = digestType;
78      }
79  
80      public String getGeneratedHash() {
81          return this.generatedHash;
82      }
83  }