2016-04-21 7 views
0

Hallo, ich versuche, eine Funktion hack() schreiben, die keine Argumente und einen Iterator über alle möglichen Passwörter zurückgibt.Erstellen eines Iterators zu Brute-Force

Grundsätzlich muss ich einen Iterator verwenden, um ein Passwort brutal zu erzwingen. Alles, was ich von der Frage weiß ist:

  • Das Passwort besteht aus drei Segmenten.
  • Das erste Segment des Passworts ist eine Verkettung von zwei Worten in der folgenden Liste von Worten: [ „Hallo“, „Weg mit dir“, „Hund“, „MrCool“]
  • Das mittlere Segment ist „Donkey20“
  • und das letzte Segment besteht aus zwei Ziffern, die zusammen (dh 1 und 7 = 17), sind nicht größer als 38 (und zumindest 0)

ist Mein Verfahren Denk diesen:

  1. Finden Sie alle möglichen Kombinationen von POSSIBLE_WORDS mit Permutati ons(). (Finden Sie alle Möglichkeiten des Segments 1)
  2. Fügen Sie für jede Kombination in der neuen Liste "Donkey20" am Ende hinzu. (Beispiel: helloBEGONEDonkey20)

  3. Hier finden Sie alle möglichen Kombinationen zwischen den Elementen in der THAT-Liste und POSSIBLE_NUMBERS.

  4. Eine Iterator, iteriert über alle diese möglichen Passwörter und schicken Sie es

nur Mein aktueller Code ist in der Lage 2 zu tun Schritt, aber statt Donkey20 am Ende jeder Kombination ist an ihm ist der Anfang. (Z Donkey20helloBEGONE statt helloBEGONEDonkey20)

POSSIBLE_WORDS = ["hello", "BEGONE", "dog", "MrCool"] 
MIDDLE = "Donkey20" 
possible_numbers1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] 
possible_numbers2 = [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28] 
possible_numbers3 = [29, 30, 31, 32, 33, 34, 35, 36, 37, 38] 
POSSIBLE_NUMBERS = possible_numbers1 + possible_numbers2 + possible_numbers3 

from itertools import permutations, combinations 

def hack(): 
    first_words = [''.join(word) for word in permutations(POSSIBLE_WORDS, 2)] 
    first_words.append(MIDDLE) 
    first_half = [''.join(word) for word in permutations(first_words, 2)] 

Jede Art und Weise, dieses Problem zu beheben? Wie beende ich den Rest der Schritte? Gibt es einen anderen Ansatz, um dieses Programm zu programmieren?

Jede Hilfe würde sehr geschätzt werden!

Antwort

2

Zunächst einmal gibt es keinen Grund, POSSIBLE_NUMBERS so aufzubauen. Verwenden Sie stattdessen range(39) oder list(range(39)).

Ihre Absicht in

first_words.append(MIDDLE) 

war mit ziemlicher Sicherheit nicht auf das Ende der Liste alle möglichen ersten Teile das Wort „Donkey20“ zu tack war aber anstatt es auf das Ende zu heften von jeweils erstes Wort. Ich denke, dass Ihre Absicht, in diesem Teil des Codes besser diese Linie sowie die folgenden Zeile und gerade die

first_half = [word + MIDDLE for word in first_words] 

einzelnen Zeilen verwenden Loswerden ausgedrückt werden Wenn Sie setzen zusammen die letzten möglichen Passwörter, Sie werden die Zahlen in Strings umwandeln müssen.Zweifellos wissen Sie bereits über str(), aber diese Funktion hat den Nachteil, dass str(1)'1' ist, während Sie wahrscheinlich '01' möchten. In diesem Zusammenhang möchten Sie möglicherweise format() verwenden, da format(1,'02')'01' zurückgibt.

Dies sollte genug eines Hinweises sein, um dich in Gang zu bringen. Da dies Hausaufgaben zu sein scheinen, möchte ich nicht mehr dazu sagen.

+0

Vielen Dank für diese Hinweise, ich war in der Tat in der Lage, den Rest auf eigene Faust zu vervollständigen! –