Erste Schritte Brute Force Algorithmus

keyvee

Neues Mitglied
Hallo!

Meine Java Kenntnisse sind noch immer eher grundlegend. Um ein wenig Übung zu bekommen habe ich mich mal an einem eigenen Brute Force Algorithmus versucht. Es ist zwar eine sehr naive Implementation, aber sie funktioniert so weit. Das hat mich so motiviert, dass ich diesen Algorithmus gerne mit eurer Hilfe verbessern würde.

Ich sollte an dieser Stelle wohl anmerken, dass ich rein akademische Zwecke verfolge und nicht die Intention habe, mit diesem Algorithmus fremde Passwörter zu knacken. Mein Ziel ist es allerdings schon ein Programm zu erstellen, mit dem ich mein eigenes WPA2 Passwort herausfinden kann. Davon bin ich jedoch noch sehr weit entfernt :)

Java:
import java.util.Arrays;


public class BruteForce {

    public static void main(String[] args) {
        int [] targetPW = {1, 4, 11, 3, 5, 13, 18, 18};     // das Passwort, nach dem gesucht wird
        int charset = 18;        // Anzahl an verschiedenen Eingabewerten
        System.out.println(Arrays.toString(brute(targetPW, charset)));

    }
  
    public static int[] brute(int [] targetPW, int charset){
      
        int [] currentPW = new int[targetPW.length];    // Neues Array, mit dem verglichen wird
        int count = 0;    // Gibt Feedback wie weit der Algorithmus gesucht hat
      
        for (int p = 0; p <= charset; p++){                // Schleife läuft max. 18 (Anzahl charset) durch, nach jedem durchlauf wird der Zähler inkrementiert
            currentPW[targetPW.length-8] = p;            // und ausgegeben
            System.out.println(count + "...");            // 8 geschachtelte For-Schleifen, da das target Array 8 Stellen hat
            count++;
                for (int o = 0; o <= charset; o++){
                    currentPW[targetPW.length-7] = o;
                        for (int n = 0; n <= charset; n++){
                            currentPW[targetPW.length-6] = n;
                                for (int m = 0; m <= charset; m++){
                                    currentPW[targetPW.length-5] = m;
                                        for (int l = 0; l <= charset; l++){
                                            currentPW[targetPW.length-4] = l;
                                                for (int k = 0; k <= charset; k++){
                                                    currentPW[targetPW.length-3] = k;
                                                        for (int j = 0; j <= charset; j++){
                                                            currentPW[targetPW.length-2] = j;
                                                                for (int i = 0; i <= charset; i++){
                                                                    currentPW[targetPW.length-1] = i;
                                                                    if (Arrays.equals(targetPW, currentPW)){    // Wenn das richtige Passwort gefunden wurde
                                                                            return currentPW;                    // wird es als Array zurückgegeben
                                                                  
                                                                    }
      
                                                                }
                                                        }
                                                }
                                        }
                                }
                        }
                }
        }
        return currentPW;
    }

}

Diese Dinge würde ich gerne ändern/verbessern:

1) Ich wäre gerne in der Lage die Methode mit einem Array aus Zahlen und Buchstaben aufzurufen (Bsp.: {h, a, n, s, m, u, e, l, l, e, r, 1, 2, 3, ...}). Ich würde dann alle doppelt vorkommenden Elemente entfernen und dann alle möglichen (erstmal 8-Stelligen) Permutationen dieses Arrays mit meinem targetPW Array vergleichen.

Mein Ansatz hier war ein String Array zu erstellen und jedem Element einen Int Wert zuzuweisen (in meinem Bsp.: h = 10, a = 11, ...). Damit könnte ich ein neues Int Array bilden (so wie es mein Code auch schon macht). Wenn eine Permutation gebildet ist müssten die Werte wieder den Buchstaben zugeordnet werden und das Int Array in ein String Array. Dann könnte ich wieder targetPW mit currentPW vergleichen. Ich glaube allerdings, dass dieser Ansatz viel zu umständlich ist.

2) Ich würde die Methode gerne mit einer variablen Password Länge aufrufen (z.B. min. 4 stellig, max. 8 stellig). Der Algorithmus sollte zuerst ein 4 stelliges Array erstellen und alle Permutationen testen. Gibt es keinen Treffer wird ein neues 5 stelliges Array gebildet usw. Da ich in meinem Code jedoch 8 verschachtelte for Schleifen habe kann ich die Länge des Arrays nicht variieren.

Generell bin ich für jeden Hinweis oder Ansatz dankbar, den ihr mir geben könnt. Man sieht ja, dass meine Möglichkeiten durch mein grundlegendes Verständnis sehr begrenzt sind.

Viele liebe Grüße,
keyvee
 
Zuletzt bearbeitet von einem Moderator:

Joose

Top Contributor
Java:
        for (int p = 0; p <= charset; p++){                // Schleife läuft max. 18 (Anzahl charset) durch, nach jedem durchlauf wird der Zähler inkrementiert
            currentPW[targetPW.length-8] = p;            // und ausgegeben
            System.out.println(count + "...");            // 8 geschachtelte For-Schleifen, da das target Array 8 Stellen hat
            count++;
                for (int o = 0; o <= charset; o++){
                    currentPW[targetPW.length-7] = o;
                        for (int n = 0; n <= charset; n++){
                            currentPW[targetPW.length-6] = n;
                                for (int m = 0; m <= charset; m++){
                                    currentPW[targetPW.length-5] = m;
                                        for (int l = 0; l <= charset; l++){
                                            currentPW[targetPW.length-4] = l;
                                                for (int k = 0; k <= charset; k++){
                                                    currentPW[targetPW.length-3] = k;
                                                        for (int j = 0; j <= charset; j++){
                                                            currentPW[targetPW.length-2] = j;
                                                                for (int i = 0; i <= charset; i++){
                                                                    currentPW[targetPW.length-1] = i;
                                                                    if (Arrays.equals(targetPW, currentPW)){    // Wenn das richtige Passwort gefunden wurde
                                                                            return currentPW;                    // wird es als Array zurückgegeben
                                                                 
                                                                    }
     
                                                                }
                                                        }
                                                }
                                        }
                                }
                        }
                }

Sorry aber diese verschachtelten Schleifen solltest du versuchen aufzulösen -> Stichwort: Rekursion

1) .......
Mein Ansatz hier war ein String Array zu erstellen und jedem Element einen Int Wert zuzuweisen (in meinem Bsp.: h = 10, a = 11, ...).

Warum umständlich jedem Buchstaben selber einen Wert geben? Wenn du einen String hast kannst du dir mittels "toCharArray()" ein "char[]" holen. "char" kann ohne Probleme in ein "int" umgewandelt werden. Du kannst auch mit "char" rechnen. Schau dir doch einfach mal eine ASCII Tabelle an um zu sehen welcher Buchstabe welchen Wert besitzt: https://www.cs.cmu.edu/~pattis/15-1XX/common/handouts/ascii.html

2) Ich würde die Methode gerne mit einer variablen Password Länge aufrufen (z.B. min. 4 stellig, max. 8 stellig). Der Algorithmus sollte zuerst ein 4 stelliges Array erstellen und alle Permutationen testen. Gibt es keinen Treffer wird ein neues 5 stelliges Array gebildet usw. Da ich in meinem Code jedoch 8 verschachtelte for Schleifen habe kann ich die Länge des Arrays nicht variieren.

Wie oben schon geschrieben per Rekursion kannst du diese Verschacheltung anders lösen und dynamischer machen.
 

Flown

Administrator
Mitarbeiter
Also ein Anhaltspunkt wäre das k-fache kartesische Produkt. Hier findest du alle Möglichkeiten aus einer gegebenen Menge. Diese musst du dann noch mit der Eingabe vergleichen.
Ein weiterer Tipp ist: Arbeite mit Collections nicht mit Arrays.

Nur so gesagt: das Wort "password" hat 8 Stellen, wenn du nur das lowercase Alphabet (26 Buchstaben) hernimmst, dann hast du 8^26 Möglichkeiten und das dauert sehr sehr lange. Selbst wenn du weißt welche Buchstaben enthalten sind sind das schon 8^7 Möglichkeiten.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Passwort Brute Force rekursiv Java Basics - Anfänger-Themen 7
javaerd Wie kann ich Brute Force Methode mit Strings erweitern Java Basics - Anfänger-Themen 1
S Distanzen mit Brute Force Java Basics - Anfänger-Themen 27
U Spielfelde erstellen & via Brute-Force jedes Feld aktivieren Java Basics - Anfänger-Themen 4
K Algorithmus entwickeln Java Basics - Anfänger-Themen 1
laxla123 Eigenschaften eines Algorithmus (determiniert vs.. deterministisch) Java Basics - Anfänger-Themen 2
C Gewinnspiel erstellen mit Algorithmus Java Basics - Anfänger-Themen 3
C negamax-Algorithmus für Tic-Tac-Toe spielt manchmal falsch Java Basics - Anfänger-Themen 10
H Minimax Algorithmus in Tic Tac Toe Java Basics - Anfänger-Themen 3
M Minimax-Algorithmus für Vier gewinnt Java Basics - Anfänger-Themen 11
ohneInformatik; Trockentest Algorithmus, mathematischen Zusammenhang angeben Java Basics - Anfänger-Themen 3
M Minimax-Algorithmus Java Basics - Anfänger-Themen 17
mervanpolat Binary Search Algorithmus ausführen Java Basics - Anfänger-Themen 1
J Rekursiver Algorithmus Java Basics - Anfänger-Themen 9
M monte carlo Algorithmus für 4 gewinnt Java Basics - Anfänger-Themen 12
izoards Sortier Algorithmus für Bounding Box Elememte Links nach Rechts und von Oben nach Unten Java Basics - Anfänger-Themen 33
S Algorithmus entwicklen, der zu einem gegebenen Datum die Jahreszeit ermittelt Java Basics - Anfänger-Themen 13
rosima26 Merge-Algorithmus Java Basics - Anfänger-Themen 53
C Ein Algorithmus soll schneller werden Java Basics - Anfänger-Themen 24
D Dijkstra Algorithmus Hilfe!! Java Basics - Anfänger-Themen 9
U Den Kuchen aufteilen - aber wie? (Rebalancing-Algorithmus) Java Basics - Anfänger-Themen 14
s_1895 Pseudocode Naiver Algorithmus Java Basics - Anfänger-Themen 17
H String verschlüsseln - eigener Algorithmus Java Basics - Anfänger-Themen 104
T Algorithmus für Index mit min-Wert Java Basics - Anfänger-Themen 2
Düsseldorf2002 Testen meines Algorithmus Java Basics - Anfänger-Themen 1
D Primzahlen Rechner nach Eratostenes von Kyrene Algorithmus Java Basics - Anfänger-Themen 2
KogoroMori21 Frage zum Euklidischen Algorithmus Java Basics - Anfänger-Themen 11
S Algorithmus java searchAll IKey Java Basics - Anfänger-Themen 4
S Algorithmus Datensätze einfügen wenn... Java Basics - Anfänger-Themen 26
KogoroMori21 MergeSort Algorithmus Java Basics - Anfänger-Themen 2
KogoroMori21 Textdatei einlesen im Array (Selection Sort Algorithmus) Java Basics - Anfänger-Themen 3
fendix Compiler-Fehler Algorithmus zur Bestimmung von Primzahlen Java Basics - Anfänger-Themen 7
S Algorithmus (reelle Zahl <65536 von dezimal zu dual) max. 10 Nachkommastellen Java Basics - Anfänger-Themen 4
G Algorithmus Graphen Java Basics - Anfänger-Themen 10
D Input/Output fehlerhafter Algorithmus zum Ersetzen von Array-Werten nach logischem Schema Java Basics - Anfänger-Themen 1
N Selection Algorithmus: Methode wird nicht erkannt (BlueJ) Java Basics - Anfänger-Themen 3
U Meinung zum Dijkstra Algorithmus Java Basics - Anfänger-Themen 6
U Dijkstra Algorithmus Laufzeit Java Basics - Anfänger-Themen 3
L Math.exp also eigenen Algorithmus Java Basics - Anfänger-Themen 2
Kirby.exe Algorithmus entwickeln Java Basics - Anfänger-Themen 37
M Algorithmus Max-Heap? Java Basics - Anfänger-Themen 3
I Labyrinth auf der Basis eines rekursiven Algorithmus Java Basics - Anfänger-Themen 27
CptK Best Practice Algorithmus nach jedem Schritt zum Visualisieren pausieren Java Basics - Anfänger-Themen 3
A Algorithmus effizienter machen Java Basics - Anfänger-Themen 1
V Algorithmus zur fortlaufenden Berechnung des duechscjnt Java Basics - Anfänger-Themen 1
M Dijkstra Algorithmus in Graphen auf mehrere verschiedene Knoten anwenden lassen Java Basics - Anfänger-Themen 11
O Labyrinth Algorithmus Java Basics - Anfänger-Themen 3
G Quicksort Algorithmus Java Basics - Anfänger-Themen 12
S Binäre-Suche Algorithmus Java Basics - Anfänger-Themen 1
D Algorithmus in Pseudocode mit log2(n) Operationen erstellen Java Basics - Anfänger-Themen 3
C Laufzeit eines Sortier-Algorithmus ermitteln Java Basics - Anfänger-Themen 4
H aufgabe java luhn algorithmus Java Basics - Anfänger-Themen 10
A Datenstruktur für Savings Algorithmus und Planung von kleinen Programmierprojekten Java Basics - Anfänger-Themen 1
J Algorithmus für eine Reihe implementieren Java Basics - Anfänger-Themen 2
S Dijkstra Algorithmus funktioniert nicht Java Basics - Anfänger-Themen 4
N Denksportaufgabe durch Algorithmus lösen Java Basics - Anfänger-Themen 2
S Problem mit einem rekursivem FloodFill Algorithmus Java Basics - Anfänger-Themen 62
B Algorithmus Square und Multiply Java Basics - Anfänger-Themen 3
J Algorithmus - Strings auf eigene Reihenfolge miteinander vergleichen Java Basics - Anfänger-Themen 4
D Frage Boyer-Moore Algorithmus Java Basics - Anfänger-Themen 7
M Komplexität Algorithmus Java Basics - Anfänger-Themen 8
H Zeichen im algorithmus Java Basics - Anfänger-Themen 4
B Code Verständnisfragen - FLoyd Warshall Algorithmus Java Basics - Anfänger-Themen 1
B Algorithmus zum entmischen einer Zahlenfolge Java Basics - Anfänger-Themen 15
X Minimax-Algorithmus über alle Kanten möglich? - Kanten darstellen Java Basics - Anfänger-Themen 1
T Algorithmus zur Überprüfung eines binären Suchbaums Java Basics - Anfänger-Themen 2
K Best Practice Algorithmus für Berechnung von Zahlenreihenfolge Java Basics - Anfänger-Themen 12
M Simpler Algorithmus läuft extrem langsam. Java Basics - Anfänger-Themen 3
L Frage zu BubbleSort Algorithmus Java Basics - Anfänger-Themen 2
B gibt es ein Stundenplan-Algorithmus? Java Basics - Anfänger-Themen 11
O Algorithmus-Problem Java Basics - Anfänger-Themen 5
P Euklidischer Algorithmus Java Basics - Anfänger-Themen 9
L Greates Commong Dividend - euklidischer Algorithmus, modulos not positive Java Basics - Anfänger-Themen 5
J Euklidischer Algorithmus Java Basics - Anfänger-Themen 1
S Quicksort Algorithmus Java Basics - Anfänger-Themen 2
S GraphNode --- Dijkstra Algorithmus : NullPointerException Java Basics - Anfänger-Themen 1
B Rekursive Algorithmus schreiben Java Basics - Anfänger-Themen 8
V Algorithmus in einer Methode ausführen Java Basics - Anfänger-Themen 3
M Implementierung des Knuth-Morris-Pratt-Algorithmus Java Basics - Anfänger-Themen 0
M Dijkstras Algorithmus Java Basics - Anfänger-Themen 5
S Zusammenhang Datenstruktur/Algorithmus Java Basics - Anfänger-Themen 1
M Simulation - Algorithmus Java Basics - Anfänger-Themen 3
F Erste Schritte Hilfe beim Algorithmus finden Java Basics - Anfänger-Themen 8
D Algorithmus für Punkte auf einem Kreis Java Basics - Anfänger-Themen 0
D Algorithmus zu gegebener Laufzeit implementieren Java Basics - Anfänger-Themen 1
B Doppelte Werte aus Array entfernen ohne Import - Algorithmus Java Basics - Anfänger-Themen 5
C Ideen für einen Algorithmus Java Basics - Anfänger-Themen 1
F Best Practice Algorithmus optimieren - Binaeruhr Java Basics - Anfänger-Themen 2
S Euklid Algorithmus zur Berechnung des GGTs Java Basics - Anfänger-Themen 2
L Welcher Algorithmus ist das ? Java Basics - Anfänger-Themen 9
J Rekursiver Horner-Schema-Algorithmus - Verstehe ich ihn richtig? Java Basics - Anfänger-Themen 2
O Java Zufalls-Verteil-Algorithmus Java Basics - Anfänger-Themen 3
P ganz simpler algorithmus Java Basics - Anfänger-Themen 3
C Sortieren ohne Algorithmus Java Basics - Anfänger-Themen 8
J Algorithmus: Grad von floating zu Grad/Minute/Sekunde Java Basics - Anfänger-Themen 3
A Text Verschriebung/Algorithmus(?) Java Basics - Anfänger-Themen 8
R Rekursionsformel für Laufzeit von Algorithmus Java Basics - Anfänger-Themen 3
E Algorithmus für kart. Produkt: als int [] Feld repräsentiert Java Basics - Anfänger-Themen 10
U Peterson Algorithmus Java Basics - Anfänger-Themen 13
algebraiker Collections Bräuchte Hilfe bei dem Algorithmus - LinkedHashMap Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben