Schwere Aufgabe ... (aber ich will das lösen)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Quemo
User
Beiträge: 26
Registriert: Mittwoch 26. März 2008, 22:14
Kontaktdaten:

Schwere Aufgabe ... (aber ich will das lösen)

Beitragvon Quemo » Dienstag 9. Dezember 2008, 12:49

Hallo.
Ich bin noch ein Anfänger in sachen Python.
Hab aber ne spannende Aufgabe gefunden.

Ich habe eine Liste mit verschiedenen Zeichen:
liste = ['A','B','C','D']

jetzt will ich da mit hilfe von python alle kombinationen herrausfinden und die soll er mir dann auflisten.

insgesammt sind das ja 4 Zeichen dh.

anzahl_kombinationen = 4 * 3 * 2 * 1
also 24 kombinationen

wie soll ich das jetzt aber schlau machen... also welche Elemente in der Liste tauschen das ich alle kombinationen herrausfinde. Ich denke mit ner for schleife würd das sicher gehn... aber ich komm iwie ned drauf wie ich an alle kombinationen komm...

wenn ich jetzt 6 buchstaben hätte
dann wären die anzahl kombinationen
6 * 5 * 4 * 3 * 2 * 1 = 720 mögliche kombinationen

kann mir da jemand helfen?

ah ja... es ist kein Schulkrams ... in der schweiz lernen wir so zeug gar ned... aha ja und bin erst 15 :)

Quemo
quemo.qu.ohost.de
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 9. Dezember 2008, 12:59

Das was du suchst sind Permutationen (Hint: Forumssuche). Die kann man auf alle moeglichen Arten implementieren, zum Beispiel auch ueber Rekursion.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Lonestar
User
Beiträge: 147
Registriert: Samstag 9. August 2008, 08:31

Beitragvon Lonestar » Dienstag 9. Dezember 2008, 13:01

Itertools bringt aber auch schon ab der 2.6 alles nötige mit
DjFresH
User
Beiträge: 36
Registriert: Donnerstag 20. November 2008, 08:28

Beitragvon DjFresH » Dienstag 9. Dezember 2008, 13:23

jetzt will ich da mit hilfe von python alle kombinationen herrausfinden und die soll er mir dann auflisten.


:D klingt nach ner vorstufe zu nem passwort knacker *lol*
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Beitragvon sea-live » Dienstag 9. Dezember 2008, 15:38

Aircrack gibt es fertig für linux
lunar

Beitragvon lunar » Dienstag 9. Dezember 2008, 15:55

Aircrack bricht keine Passwörter ...
Quemo
User
Beiträge: 26
Registriert: Mittwoch 26. März 2008, 22:14
Kontaktdaten:

Beitragvon Quemo » Dienstag 9. Dezember 2008, 18:36

thx für die antworten... :)
ich werd jetzt mal bissl was probieren und gucken obs geht... poaste dann den quelli hier

Quemo
quemo.qu.ohost.de
Costi
User
Beiträge: 544
Registriert: Donnerstag 17. August 2006, 14:21

Beitragvon Costi » Dienstag 9. Dezember 2008, 19:53

scr1pt k1dd13!
(ich war auch mal einer)


sry fuer den troll post!
cp != mv
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Beitragvon Dauerbaustelle » Dienstag 9. Dezember 2008, 20:44

@Costi: Oh man, was soll denn der Scheiß. Wer sich mit Brute-Force/Kryptographie auseinander setzt, kommt nicht drumrum, auch mal nen Brute-Force praktisch zu hacken. Und warum, um alles in der Welt, soll man dann ein "Scriptkiddie" sein?

@Quemo:
Hab gestern mal sowas zusammengefummelt.

Code: Alles auswählen

class Bruty:
    combinations = []
    def __init__(self, length, charset=map(chr, range(97,123))):
        self.length = length
        self.charset = charset

    def run(self):
        self.combinations.append(self.generate_combinations())

    def generate_combinations(self, chars=''):
        for char in self.charset:
            if len(chars) < self.length:
                self.combinations.append(self.generate_combinations(chars+char))
        return chars


Wie du sehen kannst, ist die Kombinations-Generation einfach nur eine rekursive Funktion. Das heißt, ich starte z.B. bei
"A" und schau, ob ich die gewünschte Länge erreicht habe. Wenn nicht, generiere ich für "A"+x (wobei x für je für ein Zeichen aus deiner Zeichenmenge `charset` steht) wieder die Kombinationen (rufe die Kombinationsgeneration mit "A"+x auf).
Jede erzeugte Kombination speichere ich in `combinations`.

Code: Alles auswählen

bruty = Bruty() # bzw Bruty(liste_deiner_zeichen)
bruty.run()
print bruty.combinations[:10] # mal nur die ersten 10, bin ja nicht wahnsinnig, die alle auszugeben ;)


Edit: btw, es sind nicht 5*4*3*2*1 (5! ("Fakultät 5")) Möglichkeiten. Sondern 5*5*5*5*5 (also 5^5, allgemein auch verwendete_zeichen^länge z.B. bei 5 Kleinbuchstaben dann 26^5). Du kannst das "A" ja auch an zweiter Stelle *nochmals* verwenden, du "verlierst" es ja nicht ;)
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Beitragvon numerix » Dienstag 9. Dezember 2008, 20:48

Dauerbaustelle hat geschrieben:Hab gestern mal sowas zusammengefummelt.


Hättest du auch mal testen sollen .... :wink:
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Beitragvon Dauerbaustelle » Dienstag 9. Dezember 2008, 22:14

numerix hat geschrieben:
Dauerbaustelle hat geschrieben:Hab gestern mal sowas zusammengefummelt.


Hättest du auch mal testen sollen .... :wink:

Äh... eigentlich tut das doch? O_o

Mir fällt grade auf, bei der Instanzierung von Bruty muss man als erstes Argument die maximale Länge angeben.
also Bruty(3) oder Bruty(3, ['a','b','c'])

Gruß
DasIch
User
Beiträge: 2402
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Beitragvon DasIch » Dienstag 9. Dezember 2008, 22:31

Dauerbaustelle hat geschrieben:
numerix hat geschrieben:Hättest du auch mal testen sollen .... :wink:
Äh... eigentlich tut das doch? O_o

Code: Alles auswählen

>>> bruty = Bruty(3, ascii_letters)
>>> bruty.run()
>>> len(bruty.combinations) == len(ascii_letters) ** 3
False
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Beitragvon numerix » Dienstag 9. Dezember 2008, 22:39

Dauerbaustelle hat geschrieben:Äh... eigentlich tut das doch? O_o

Mir fällt grade auf, bei der Instanzierung von Bruty muss man als erstes Argument die maximale Länge angeben.
also Bruty(3) oder Bruty(3, ['a','b','c'])


Code: Alles auswählen

>>> bruty = Bruty(3)
>>> bruty.run()
>>> bruty.combinations
['']
>>> bruty = Bruty(3,["a","b","c"])
>>> bruty.run()
>>> bruty.combinations
['']
Quemo
User
Beiträge: 26
Registriert: Mittwoch 26. März 2008, 22:14
Kontaktdaten:

Beitragvon Quemo » Mittwoch 10. Dezember 2008, 12:44

Hallo.

Hab mir jetzt mal was zusammengeproggd das problem ist nur das wenn ich einen string von mehr als 14 zeichen länge eingebe er meinen memory füllt
ist wegen der rekursion... wie kann ich das lösen?

Hier der Code: -- bitte ned wegen variabelnamen meckern... hab das so speed cooding art gemacht
http://rafb.net/p/VZ9J7817.html
quemo.qu.ohost.de
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Beitragvon Dauerbaustelle » Mittwoch 10. Dezember 2008, 13:44

@numerix: Ja, du verwendest die Version des Codes vor dem ersten Edit. Die hat alle Möglichkeiten und 3 Zeichen Länge ausgeschlossen :)

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]