Ja, ich bins mal wieder mit der bitte um Verbesserungsvorschläge. Ich wollte aus einem Zeichensatz alle Möglichen Kombinationen innerhalb einer bestimmten Länge generieren. Habe ich in einer Schleife auch geschafft. Allerdings erscheint mir dieser Weg sehr umständlich, deshalb wollte ich fragen, ob jemand einen anderen besseren Weg kennt, damit ich auch dazulerne, und nicht immer die selben schlechten Sources schreibe. =)
Alle paar mal (Im mom. jedes Millionte mal) wird der erste und der letzte String in einer Klasse zusammengefasst.
Alle paar mal (Im mom. jedes Millionte mal) wird der erste und der letzte String in einer Klasse zusammengefasst.
Java:
package core;
public class Jobsheduler extends AbstractJobSheduler {
private Command command;
Jobsheduler(Command command) {
super();
this.command = command;
}
public void run() {
try {
String hash = command.getParameter(0);
String charset = command.getParameter(1);
int minTestLenght = Integer.parseInt(command.getParameter(2));
int maxTestLenght = Integer.parseInt(command.getParameter(3));
char[] charsetChars = charset.toCharArray();
char[] lastHashChars = new char[maxTestLenght];
for(byte b = 0; b < maxTestLenght; b++)
lastHashChars[b] = charsetChars[charsetChars.length - 1];
boolean loopRun = true;
char[] plainChars = new char[minTestLenght];
command = new Command(null, null);
command.addParameter("md5.jar");
command.addParameter(hash);
command.addParameter(charset);
for(long loopCounter = 0L; loopRun; loopCounter++) {
plainChars = add(plainChars.length - 1, charsetChars,plainChars, maxTestLenght);
if(String.valueOf(plainChars).equals(String.valueOf(lastHashChars))) {
if(loopCounter == 0) {
command.addParameter(String.valueOf(plainChars));
}
command.addParameter(String.valueOf(plainChars));
loopRun = false;
} else if(loopCounter == 0) {
command.addParameter(String.valueOf(plainChars));
} else if(loopCounter == Math.pow(10.0d, 6.0d)) {
command.addParameter(String.valueOf(plainChars));
command = new Command(null, null);
command.addParameter("md5.jar");
command.addParameter(hash);
command.addParameter(charset);
loopCounter = -1;
}
}
}
catch (NumberFormatException e) {}
}
private char[] add(int location, char[] charsetChars, char[] plainChars, int maxTestLenght)
{
int positionFromCharAtLocationInCharset = getPostitionFromCharInCharset(location, charsetChars, plainChars);
if(positionFromCharAtLocationInCharset == charsetChars.length - 1 && location != 0) {
plainChars = add(location - 1, charsetChars, plainChars, maxTestLenght);
plainChars[location] = charsetChars[0];
} else if(positionFromCharAtLocationInCharset == charsetChars.length - 1 &&
plainChars.length != maxTestLenght) {
plainChars = copyArray(charsetChars[0], plainChars);
} else {
plainChars[location] = charsetChars[positionFromCharAtLocationInCharset + 1];
}
return(plainChars);
}
private char[] copyArray(char firstCharInCharset, char[] plainChars)
{
char[] newArray = new char[plainChars.length + 1];
for(byte b = 0; b < newArray.length; b++) {
newArray[b] = firstCharInCharset;
}
return(newArray);
}
private int getPostitionFromCharInCharset(int location, char[] charsetChars, char[] plainChars)
{
char plainChar = plainChars[location];
int positionFromCharAtLocationInCharset = -1;
for(byte b = 0; b < charsetChars.length && positionFromCharAtLocationInCharset == -1; b++) {
if(charsetChars[b] == plainChar) {
positionFromCharAtLocationInCharset = b;
}
}
return(positionFromCharAtLocationInCharset);
}
}