Buchstabensalat / Brutforce

Hi,

ich wollte ein Tool schreiben, dass aus einem String mit Buchstabensalat alle möglichen Zeichenketten, die man aus den Buchstaben zusammensetzen kann generiert, und in eine Liste schreibt.

Ich hab zwar die Buchstaben schon auf ein array verteilt, aber mir fällt einfach keine logik dahinter ein, die ich einsetzen könnte.

Hat jemand nen Tip?
 
soll das Ergebnis ein sinnvolles Wort sein oder die Buchstaben einfach nur nacheinander gereiht?

wenn es sinnvolle Wörter egeben soll, brauchst du ein Wörterbuch (und das wird schwer) indem schon ganz ganz ganz viele Wörter stehen, die du mit dem Buchstabensalat vergleichst und schaust ob alle Buchstaben aus dem "Salat" auch in irgendeinem (oder mehreren) Wort aus dem Wörterbuch enthalten ist (sind).

wenn es einfach nur eine Aneinanderreihung sein soll:
am besten lässt du den String mit dem Buchstabensalat in ein Char Array umwandeln (also bei java geht das ganz einfach) und jenachdem wie viele Stellen dein Ergebnis String haben soll gehst du alle chars aus deinem Array, für jede Stelle, durch also z.B.
wenn dein Buchstabensalat_Array n Zeichen hat und k Zeichen lang sein soll

Stelle 1: Buchstabensalat_Array[0] bis Buchstabensalat_Array[n]
Stelle 2: Buchstabensalat_Array[0] bis Buchstabensalat_Array[n]
.
.
.
Stelle k: Buchstabensalat_Array[0] bis Buchstabensalat_Array[n]

aber ich denke da bist du bestimmt auch selber draug gekommen :-)

nur das auf die platte schreiben ist so ne sache.
hab auch mal 6 stelleige Strings mit nur klein Buchstaben erzeugen lassen und diese einfach in eine Textdatei schreiben lassen (mit Java) da war ich sehr schnell über 4 GB Dateigröße und habe noch lange nicht alle Stings erzeugt.

wenn du bedenkst:
6(stellen) ^ 26 (buchstaben) = 170581728179578208256 mögliche Strings
das ist ne ganze Menge!
 
Also nochmal. n beispiel.

der buschstabensalat ist z.B. smua

und dann soll das skript ne liste mit folegnden werten ausgeben

smau
saum
suam
masu
msau
maus
usam
uasm
umas
ausm
amus
aums
(...)


Aber wie mach ich das jetzt, dass er z.B. wie im beispiel von Benwilliam nicht irgendwelche zeichen zweimal verwendet.

Ich mein mit ner fixen zeichenlänge wär das kein ding, da ich dann entsprechernd viele secundärschleifen erstellen könnte.
 
hier mal ein entsprechende java code:
Code:
public class BruteForce {
	
	public static void main(String[] arg) {	
		String word = "test";
		String charset;
		// charset = entferneDoppelteBuchstaben(word);
		charset = "tes";
		int wordLength = word.length();
		
		BruteForceAlgo(charset, wordLength);
	}
	
	public static void BruteForceAlgo(final String charset, final int wordLength) { 
	    long startw = 0; 
	    final long endw = (long)Math.pow(charset.length(), (double)wordLength); 
	    StringBuffer s;
	    
	    while(startw < endw) { 
	    	s = new StringBuffer(""); 
	        long mw = startw;  
	        for (int i=wordLength; i>=0; i--) { 
	            long d = (long)Math.pow(charset.length(), (double)i); 
	            int w = (int)(mw/d); 
	            
	            if (i==wordLength) {
	            	if (w!=0) s.append(charset.charAt(w));
	            }
	            else s.append(charset.charAt(w));
	            
	            mw = mw-(w*d); 
	        } 
	        
	        System.out.println(s);
	        
	        startw++; 
	    }   
	}
}
 
ich glaube das ist genau das was der nicht haben will :D
mit dem algo wird jede stelle mit jedem zeichen belegt -> doppelte verwendung der Zeichen, und das will der ja nicht

ich denke Rekursion ist ein guter Ansatz :-)
 
Original von DolphVS
Nennt sich so was nicht annagram oder so?


Ja genau, so in der art eines anagramms, nur dass das script ne ganze liste mit möglickieten ausgeben soll. ohne drauf zu achten, dass das durch die umstellung Tatsächlich ein neuer sinn entsteht.


Der Algoritmus siht interessant aus, aber ich versteh ihn nicht so ganz, könntest du das noch komentieren.
 
der zuvor gepostete Algorithmus macht nicht nur Annagrame sondern alle möglichen variationen der Buchstaben

aber hier findest du Beispiel Algorithmus in PASCAL
 
In der C++-Standard-Library ALGORITHM gibt es u.a. folgende PERMUTATIONS-Funktionen:

prev_permutation()
next_permutation()

Diese treffen exakt auf dein Problem zu und sind bereits auf Geschwindigkeit optimiert.
Vllt. werde ich diese Funktionen ebenfalls bald in mein eigenes Bruteforce-Tool einbauen.
Und wenn du den Code meines Tools haben willst - sag Bescheid (Cryptography & Encryption > Mein eigenes Bruteforce-Tool).



MfG, BattleMaker
 
Zurück
Oben