# "Brute-Force" String Code?



## Badmaster (5. April 2003)

lo all,
bin atm auf der suche nach einem kleinen brute-force code der mir strings "ausgibt", sprich verschiedene möglichkeiten durchtestet.
bin rel. neu bei den oos, ein kleiner code schnippsel wäre also supernett.
der code sollte theoretisch einen string von unbegrenzten zeichen zurückgeben können! also nicht x schleifen und sonen riesen quellcode erzeugen... (falls das geht) (falls ich mich undeutlich ausgedrückt habe, ich sollte der funktion oder was auch immer eine min und/oder maxlength angeben können für die es alle möglichkeiten durchprobiert..)
so hoffe das war verständlich...

thnx in advance
Gruss Badmaster 

*sichwiederindielektürevertief*


----------



## Christian Fein (6. April 2003)

Wie währe es wenn du es selber 
versuchst?
Und wenn du auf ein Spezifisches Problem dabei stösst dann wird dir gerne geholen.


----------



## Badmaster (6. April 2003)

tja bin leider ziemlich ratlos...
mir fällt nix ein ausser halt jede menge schleifen zu machen aber das wäre ziemlich sinnlos...
hmmm


```
string myString;
char[] myChars = new char[24];
char[0] = "a";
char[1] = "b";
char[2] = "c";
char[3] = "d";
[...]

for(int i=0;i<24;i++)
{
myString = char[i];
if(tryit(myString))
{
Console.WriteLine("String ist:" + myString);
exit; // richtiges gefunden
}

}
```
tryit wäre dann ne funktion ob überprüft ob der string nun stimmt...
wie aber mach ich das elegant? bitte helft mir 

was mir fehtl ist irgendwie die idee für ein grundgerüst ...


----------



## Robert Martinu (6. April 2003)

Erinner dich mal an die ersten Mathestunden und betrachte den String wie eine Zahl, die aus vielen Ziffern zusammengesetzt ist.

"Wenn höchste Ziffer erreicht ist, dann erhöhe die Nächste um 1"
Falls jetzt alle deine Zeichen sequentiell vorkommen ists eine einfache Übung.
(in anderen Zahlensystemen rechnen funktioniert übrigens ähnlich, das könntest du auch noch mal brauchen)


----------



## Badmaster (6. April 2003)

*dummvorkomm*
dann probiert es aber doch jeweils nur z* und zz* zzz* etc durch ?!


----------



## Badmaster (6. April 2003)

```
function bfstring(int min_length,int max_length)
{
string myString;
string mytempString;
int pos = min_length;
int seq = 1;
char[] myChars = new char[24];
char[0] = "a";
char[1] = "b";
char[2] = "c";
char[3] = "d";
[...]
for(int i=0;i<24;i++)
{
if(pos>1)
{

if(mytempString.Length>=pos)
{
mytempString = mytempString.Substring(0,pos-1);
}


mytempString += char[i];
}
else
{
mytempString = char[i];
}

if(tryit(mytempString))
{
myString = mytempString;
Console.WriteLine("String ist:" + myString);
exit; // richtiges gefunden
}

if(i == 23)
{

if(pos>1 && seq < 24)
{
if(mytempString.Length>=pos)
{
mytempString = mytempString.Substring(0,pos-1);
}
mytempString += char[seq];
seq++;
i=-1;
}
else
{
if(seq==24)
{
pos++;
seq=1;
i=-1;
}
}


}



}





}
```
hmmmm ist das ein ansatz in die richtige richtung, oder habe ich grad einfach einen riesen mist gemacht und zeit verschwendet? ^^


----------



## Badmaster (6. April 2003)

ich glaub ich verschwende so nur meine zeit...

```
using System;

class bfstring
{


static void Main()
{
int max_length = 6;
int min_length = 1;
string myString;
string mytempString = "a";
int pos = min_length;
int seq = 0;
string[] myChars = new string[26];
myChars[0] = "a";
myChars[1] = "b";
myChars[2] = "c";
myChars[3] = "d";
myChars[4] = "e";
myChars[5] = "f";
myChars[6] = "g";
myChars[7] = "h";
myChars[8] = "i";
myChars[9] = "j";
myChars[10] = "k";
myChars[11] = "l";
myChars[12] = "m";
myChars[13] = "n";
myChars[14] = "o";
myChars[15] = "p";
myChars[16] = "q";
myChars[17] = "r";
myChars[18] = "s";
myChars[19] = "t";
myChars[20] = "u";
myChars[21] = "v";
myChars[22] = "w";
myChars[23] = "x";
myChars[24] = "y";
myChars[25] = "z";



for(int i=0;i<27;i++)
{

if(i == 26)
{
if(pos>1 && seq < 26)
{
if(mytempString.Length>=pos-1)
{
mytempString = mytempString.Substring(0,pos-2);
}
mytempString += myChars[seq];
seq++;
i=0;
}
else
{
if(seq==26)
{
pos++;
seq=1;
i=0;
}
else
{
if(mytempString.Length>=pos-1)
{
mytempString = mytempString.Substring(0,pos-1);
}
mytempString += myChars[seq];
seq++;
i=0;
pos++;
seq=1;
i=0;
}
}


}//if i==25 zu



if(pos<=1)
{
mytempString = myChars[i];
}
else
{
if(mytempString.Length>=pos)
{
mytempString = mytempString.Substring(0,pos-1);
}


mytempString += myChars[i];
}


//if(tryit(mytempString))
//{
//myString = mytempString;
//Console.WriteLine("String ist:" + myString);
//exit; // richtiges gefunden
//}









if(pos>=max_length)
{
break;
}
else
{
Console.WriteLine("String:"+mytempString);
}


}//for schleife ende





}
}
```
das ändert jeweils aber nur die beiden letzten ziffern....
wie schon gesagt ein konkretes beispiel... BITTE!
.


----------



## Badmaster (6. April 2003)




----------



## Badmaster (6. April 2003)

was los? kann keiner helfen oder will keiner?


----------



## Badmaster (8. April 2003)

geile hilfe 
so tun als ob aber wenns drauf ankommt... :-(


----------



## Sinac (8. April 2003)

Ich sage dir das nur ungern, aber je öfters du pusht desto
geringer wird die wahrscheinlichket das dir jemand hilft...


----------



## Matthias Reitinger (8. April 2003)

@Badmaster:
Manche Leute haben auch noch was anderes zu tun außer den ganzen Tag fremder Leute Probleme für lau zu lösen... Geld verdienen z.B. oder sich um seine Ausbildung kümmern...


----------



## Sneaker (8. April 2003)

schon mal was von debuggen gehört ?
anstatt andere  nach problemen zu fragen lieber schritt für schritt das programm durchgehen im notfall lass ich mir echt jede zeit ausgeben.


----------



## Thomas Darimont (8. April 2003)

Servus!

Bin schon dran... leider kenn ich mich mit der C Syntax noch nicht so gut aus, deshalb kommt gleich der Algorithmus in Java...
müsstest du eigentlich leicht adaptieren können...

fertig!...*g*



```
import java.io.*;

/*
 * Permutation.java
 *
 * Created on 8. April 2003, 20:05
 */

/**
 *
 * @author  Administrator
 */

public class Permutation{
    
    int maxIndex;
    char[] carray;
    String s;
    BufferedReader br;
    int anz = 0;
    
    public Permutation(){
        
    }
    
    public void ausgabe(char[] a) {
            for (int i=0; i<=maxIndex; i++) {
                System.out.print(a[i]);
            }
            System.out.print("\n");
            
        }
    
    
    
    public void doIt(){
        
        br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Gib deinen String ein...:");
        try{
            s = br.readLine();
        }catch(IOException ioe){
            System.out.println(ioe.toString());
        }
        
        maxIndex = s.length()-1;
        carray = s.toCharArray();
        permut(carray, maxIndex);
        
        System.out.println("\nEs sind :" + anz +" Permutationen");
        
    }
    
    public void swap(char[] a, int i, int j) {
        char temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }
    
    public void permut(char[] a, int endIndex) {
        if (endIndex==0){
            ausgabe(a);
            anz++;
        }else{
            permut(a, endIndex-1);
            for (int i=0; i<=endIndex-1; i++){
                swap(a, i, endIndex);
                permut(a, endIndex-1);
                swap(a, i, endIndex);
            }
        }
    }
    
    
    
    
    public static void main(String[] args){
        Permutation p = new Permutation();
        p.doIt();
        
        
    }
    
}
```

Gruss Tom


----------



## Badmaster (8. April 2003)

> _Original geschrieben von Sneaker _
> *schon mal was von debuggen gehört ?
> anstatt andere  nach problemen zu fragen lieber schritt für schritt das programm durchgehen im notfall lass ich mir echt jede zeit ausgeben. *


lol... debuggen? nxi debuggen.. das programm das ich geschrieben habe kann nicht mehr... is nicht gebuggt... *lol*
bigmegathnx @tdar2     *codeanschau*

@reima
sorry... ihr habt so getan als ob das keine sache sei und noch dazu so schnell geantwortet... was soll ich denn da denken?:-(


----------



## Badmaster (8. April 2003)

ähm... dein algorithmus scheint einen string zu verlangen den er dann in verschiedene reihenfolgen setzt... eigentlich hab ich was anderes gemeint...


----------



## Thomas Darimont (8. April 2003)

Servus!

...hmmm von deiner Fragestellung her würd' ich immernoch behaupten, das angegebene Programm löst dein Problem...

hast du denn das obige Beispiel mal ausprobiert?


----------



## Christian Fein (9. April 2003)

```
String myStr;


int lastround = 0;
for(int a=0; a < 8 ; a++) {
  aktuellMax = a * 26;
  if((lastround+a)==aktuellMax)
               myStr = StringToA(myStr);
   lastround = aktuellMax;
}

private String StringToA(String myStr) {
  for(int a =0; a < myStr.length; a++) {
         Char oldChar = myStr.charAt(a);
          myStr.replay(oldChar,'a');
   }
   myStr.append('a');
   return myStr;
}
```

ungetestet und nur schemahaft programmiert aber zeigt wohl den weg.


----------



## Mr.Undertaker (25. April 2003)

Badmaster hat gesagt.:
			
		

> lol... debuggen? nxi debuggen.. das programm das ich geschrieben habe kann nicht mehr... is nicht gebuggt... *lol*
> bigmegathnx @tdar2     *codeanschau*



Wie soll dein Code nicht zu debuggen sein???? Weißt du überhaupt was das ist???


----------



## Badmaster (25. April 2003)

> _Original geschrieben von HolyFly _
> 
> ```
> String myStr;
> ...


thnx 4 code
was genau machen myStr.replay und myStr.charAt ?


@ undertaker.. der code kann nicht mehr machen.. ich müsste mehr schleifen hinzufügen damit er alle chars verändern würde was ich aber von anfang an nciht wollte.. deshalb kein debuggen weder vom compiler noch von der funktion...


----------



## Christian Fein (25. April 2003)

lol hat sich der Fehlerteufel eingeschlichen
streiche 
myStr.replay()

setze 
myStr.replace()

und diese Funktion ersetzt Char Vorkommen parameter 1 in dem String mit Char parameter 2

charAt(int index) gibt dir char an der Position des indexes zurück


----------



## Badmaster (3. Mai 2003)

nachdem ich holyflys funktion ned so ganz geschnallt habe (hab das gefühl das funzt ned?  )
hab ich mal wieder selber drangesetzt weil ich ne idee hatte...

```
using System;

class MainClass
{


static void Main()
{

string myStr = "";
int max_str_length = 4; //maximum länge des Strings
int actual_str_length = 1; // aktuelle position
int max_var_length = 27; //anzahl an chars in myChars Array
int anzahl_versuche = 0; // anzahl vereits versuchter Kombinationen
double anzahl_moeglichkeiten = 0;
int[] positions = new int[max_str_length];
string letzte_check = "nein";
string neue_ding = "nein";
string double_check;
string[] myChars = new string[27];
myChars[0] = "";
myChars[1] = "a";
myChars[2] = "b";
myChars[3] = "c";
myChars[4] = "d";
myChars[5] = "e";
myChars[6] = "f";
myChars[7] = "g";
myChars[8] = "h";
myChars[9] = "i";
myChars[10] = "j";
myChars[11] = "k";
myChars[12] = "l";
myChars[13] = "m";
myChars[14] = "n";
myChars[15] = "o";
myChars[16] = "p";
myChars[17] = "q";
myChars[18] = "r";
myChars[19] = "s";
myChars[20] = "t";
myChars[21] = "u";
myChars[22] = "v";
myChars[23] = "w";
myChars[24] = "x";
myChars[25] = "y";
myChars[26] = "z";

try
{
// positionen zuweisen 0 = "" | 1 = "a" | 2 = "b" | etc...
for(int pos_i = 0;pos_i < max_str_length;++pos_i)
{
positions[pos_i]=0;
}


//möglichkeiten Berechnung
for(double k = 1;k<=max_str_length;k++)
{
double temp_length = max_var_length-1;
anzahl_moeglichkeiten += Math.Pow(temp_length,k);



}// for(int k = 1;k<=max_str_length;k++) ENDE


Console.WriteLine("Maximum Anzahl Moeglichkeiten:"+anzahl_moeglichkeiten);



for (int b = 0;b<anzahl_moeglichkeiten;++b)
{
letzte_check = "nein";
neue_ding = "nein";
myStr = "";
for(int zu_t = 0;zu_t < max_str_length;zu_t++)
{
myStr = myStr + myChars[positions[zu_t]];


}// for(int zu_t = 0;zu_t < max_str_length;zu_t++) ENDE

anzahl_versuche++;
Console.WriteLine("String: "+myStr);


for(int pos_i = max_str_length-1;pos_i > -1;--pos_i) //geht das positions Array durch
{

if(positions[pos_i]>=26)
{

	if(pos_i>0)
	{
	positions[pos_i] = 1;
	positions[pos_i-1]++;
	pos_i = max_str_length-1;
	Console.WriteLine("oberes if Ding ausgeloest." + pos_i);
 	Console.WriteLine("______________________________________");
	Console.WriteLine("Positionen: 0: "+positions[0]+" | 1: "+positions[1]+" | 2: "+positions[2]);
 	Console.WriteLine("______________________________________");
// 	continue;

	}// if(pos_i>0) ENDE
	
	
	if(positions[pos_i]>=26 && pos_i == 0)
	{
   	positions[pos_i] = 1;
   	for(int pos_i2 = max_str_length-1;pos_i2 > -1;--pos_i2)
   	{
	
	   	if(positions[pos_i2] == 0 && positions[pos_i2-1] > 0 && neue_ding =="nein")
	   	{
	   	positions[pos_i2]++;
	   	neue_ding = "gemacht";
	   	}// if(positions[pos_i2] == 0 && positions[pos_i2-1] > 0) ENDE
   	
   	
   	
   	}//for(int pos_i2 = max_str_length-1;pos_i2 > -1;--pos_i2) ENDE
   	
//	letzte_check = "next";
//	pos_i = max_str_length-1;
//	Console.WriteLine("if ding mit continue wurde ausgeloest");
 //	Console.WriteLine("______________________________________");
//	Console.WriteLine("Positionen: 0: "+positions[0]+" | 1: "+positions[1]+" | 2: "+positions[2]);
// 	Console.WriteLine("______________________________________");
//	continue;
	}// if(positions[pos_i+1]>=26 || positions[pos_i+1] == 0) ENDE	
	




}// if(positions[pos_i]>=26) ENDE


if(pos_i > 0)
{
//if(positions[pos_i] == 0 && positions[pos_i-1] > 0 && letzte_check == "next")
///{
//positions[pos_i]++;
// 	Console.WriteLine("______________________________________");
// 	Console.WriteLine("___________ hier geaddet __________");
// 	Console.WriteLine("______________________________________");
//}// if(positions[pos_i] == 0 && positions[pos_i-1] > 0 && letzte_check == "next") ENDE
}// if(pos_i > 0)) ENDE
else
{// if(pos_i > 0) ELSE


if(positions[pos_i] == 0)
{
positions[pos_i]=1;
}// if(positions[pos_i] == 0)ENDE
}// else von if(pos_i > 0) ENDE

if(positions[pos_i] > 0 && positions[pos_i] < 26 && letzte_check == "nein")
{
letzte_check = "ja";
positions[pos_i]++;
}// if(positions[pos_i] > 0 && positions[pos_i] < 26) ENDE



}// for(int pos_i = 0;pos_i < max_str_length;++pos_i) ENDE //geht das positions Array durch ENDE

//Console.WriteLine("Positionen: 0: "+positions[0]+" | 1: "+positions[1]+" | 2: "+positions[2]);



}//for (int b = 0;b<anzahl_moeglichkeiten;++b) ENDE















}//try ENDE
catch (Exception e)
{
Console.WriteLine("\nException:"
				+ "\n Meldung: "+e.Message
				+ "\n TargetSite: "+e.TargetSite
				+ "\n StackTrace: "+e.StackTrace);

}//catch (Exception e) ENDE
Console.WriteLine("Anzahl Versuche: "+anzahl_versuche);

}// static void Main() ENDE

}//MainClass ENDE
```
wie immer chatoisch und mit meinen ganz eigenen methoden... is direkt ausm entwurf...
könnts ja mal ausführen funzt eigentlich bis auf das bei der möglichkeiten berechnung zu früh aufhört  (bei 3 max_str_length gings....)
danke für hilfe


----------



## Badmaster (4. Mai 2003)

hilf dir selbst sonst hilft dir keiner  scheint jedenfalls hier so zu sein oder /me is einfach zu blöd 
hab mal am morgen gecoded und sieh da nach kurzem debug geht jetzt mein code perfekt ;-) 
Wer Fragen hat kann sie ja posten  (der code von vorher hat das gleiche Schema aber is ned ganz funktionstüchtig...)
und weiter gehts zu den socketspielereien  *hrrr*
ciao bade


----------



## Christian Fein (5. Mai 2003)

> _Original geschrieben von Badmaster _
> *hilf dir selbst sonst hilft dir keiner  scheint jedenfalls hier so zu sein oder /me is einfach zu blöd
> hab mal am morgen gecoded und sieh da nach kurzem debug geht jetzt mein code perfekt ;-)
> *



Und wie wir dir geholfen haben. 
Du hast dich durch unser ignorieren dazu durchringen können das selber hinzubiegen.
Dabei lernt mann am meisten.

Zudem haben viele (mich eingeschlossen) keine Lust & Zeit sich 50 Zeilen Code anzuschauen.


----------



## Badmaster (5. Mai 2003)

hehe
danke für euer ignorieren  (hätte ja sein können, dass einer das konzept eines solchen algorithmusses kennt und hätte mir dann gleich zu dem schema raten können )
btw chris, du weisst nicht zufällig ob es mit c# möglich ist wirklich einzelne tcp/udp packets zu senden und ned einfach per tcplistener oder tcpclient irgend welche vorgefertigten ms packets zu benutzen?
thnx in advance 
Gruss Badmaster


----------



## Christian Fein (5. Mai 2003)

msdn ist hier dein Freund.
System.Net.Socket.UdpClient 

```
// This constructor arbitrarily assigns the local port number.
UdpClient udpClient = new UdpClient();
    try{
         udpClient.Connect("www.contoso.com", 11000);

         // Sends a message to the host to which you have connected.
         Byte[] sendBytes = Encoding.ASCII.GetBytes("Is anybody there?");
      
         udpClient.Send(sendBytes, sendBytes.Length);

         // Sends a message to a different host using optional hostname and port parameters.
         UdpClient udpClientB = new UdpClient();
         udpClientB.Send(sendBytes, sendBytes.Length, "AlternateHostMachineName", 11000);

         //IPEndPoint object will allow us to read datagrams sent from any source.
         IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);

         // Blocks until a message returns on this socket from a remote host.
         Byte[] receiveBytes = udpClient.Receive(ref RemoteIpEndPoint); 
         string returnData = Encoding.ASCII.GetString(receiveBytes);
   
         // Uses the IPEndPoint object to determine which of these two hosts responded.
         Console.WriteLine("This is the message you received " +
                                      returnData.ToString());
         Console.WriteLine("This message was sent from " +
                                     RemoteIpEndPoint.Address.ToString() +
                                     " on their port number " +
                                     RemoteIpEndPoint.Port.ToString());

          udpClient.Close();
          udpClientB.Close();
          
          }  
       catch (Exception e ) {
                  Console.WriteLine(e.ToString());
        }
```


----------

