Was ist falsch?

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.
Antworten
Jakoobi
User
Beiträge: 1
Registriert: Freitag 31. Januar 2025, 23:24

Ich möchte mit folgendem Code eine Datei erstellen lassen, in welcher Pro Zeile eine Kombinationsmöglichkeit (zwischen 1-30Zeichen) aller Buchstaben, zahlen und Sonderzeichen erstellt wird. Der Code, welchen ich geschrieben hat, funktioniert jedoch nicht. Weshalb?
MfG Z


import itertools
import string

zeichen_set = string.ascii_letters + string.digits + string.punctuation

def generate_combinations(Passwordlist):
with open("Passwordlist.txt", "w", encoding="utf-8") as file:
for lenght in range(1, 31):
for combination in itertools.product (characters, repeat=lenght):
file.write("", join(combination) + "\n")
Benutzeravatar
Kebap
User
Beiträge: 749
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Hallo Z oder Jakoobi,

willkommen im Forum! Warum möchtest du denn so viele Passworte kombinieren? :mrgreen:

Bei 52 Buchstaben, 10 Ziffern und 32 Sonderzeichen, gibt es 156255606166664794744820432128893757248925435391359137611776 davon...!?
Jakoobi hat geschrieben: Sonntag 2. Februar 2025, 15:52 Ich möchte mit folgendem Code eine Datei erstellen lassen, in welcher Pro Zeile eine Kombinationsmöglichkeit (zwischen 1-30Zeichen) aller Buchstaben, zahlen und Sonderzeichen erstellt wird. Der Code, welchen ich geschrieben hat, funktioniert jedoch nicht. Weshalb?
MfG Z


import itertools
import string

zeichen_set = string.ascii_letters + string.digits + string.punctuation

def generate_combinations(Passwordlist):
with open("Passwordlist.txt", "w", encoding="utf-8") as file:
for lenght in range(1, 31):
for combination in itertools.product (characters, repeat=lenght):
file.write("", join(combination) + "\n")
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Sirius3
User
Beiträge: 18135
Registriert: Sonntag 21. Oktober 2012, 17:20

Funktioniert nicht, ist eine schlechte Fehlerbeschreibung. Was genau passiert? Gibt es eine Fehlermeldung?
Deine Einrückung ist fehlerhaft. Das def ist zu weit eingerückt.
Auch sonst stimmt die Einrückungen nicht, eingerückt wird immer mit 4 Leerzeichen pro Ebene, und nicht mal 1, 4, 7 oder 10 Leerzeichen.
Variablennamen werden immer komplett klein geschrieben.
Alles was eine Funktion braucht, wird über ihre Argumente übergeben. In generate_combinations fehlt `characters` dafür ist `Passwordlist` zu viel.
Es heißt `length` nicht `lenght`.
`file.write` erwartet ein Argument, Du übergibst aber zwei.

Die Funktion könnte vielleicht so aussehen:

Code: Alles auswählen

def generate_combinations(characters):
    with open("Passwordlist.txt", "w", encoding="utf-8") as file:
        for length in range(1, 31):
            for combination in itertools.product(characters, repeat=length):
                file.write("".join(combination) + "\n")
Benutzeravatar
noisefloor
User
Beiträge: 4035
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Generelle Anmerkung dazu noch: aufgrund der oben bereits genannten immensen Vielzahl an möglichen Kombination brauchen selbst die neusten CPUs mit hoher Singlethreading Leistung zum generieren der Liste super lange und das wird eine seeeeehr große Datei. Vielleicht vorher auch mal nachschauen, was die maximale Dateigröße des Dateisystems der eigenen Wahl ist.

Wenn die Liste für Brute-Force Angriffen gegen ??? dienen soll ist das kein sinnvoller Weg. Es sei denn, man hat wirklich viel Zeit.

Gruß, noisefloor
nezzcarth
User
Beiträge: 1720
Registriert: Samstag 16. April 2011, 12:47

noisefloor hat geschrieben: Montag 3. Februar 2025, 18:47 Vielleicht vorher auch mal nachschauen, was die maximale Dateigröße des Dateisystems der eigenen Wahl ist.
Die genannte Zahl gibt ja sogar nur die Kombinationen an, nicht die Anzahl der Zeichen. Aber selbst wenn man vereinfachend annimmt, dass jedes Passwort nur ein Byte hat und es keine Trennzeichen gibt, sind wir bereits in einem Bereich (10**59), für den es nicht mal mehr SI-Präfixe gibt (da ist bei 10**30 Ende). Moderne Dateisysteme wie BTRFs geben "schon" bei theoretisch möglichen 16 EiB pro Einzeldatei auf (und dafür müsste man auch erst einmal einen Kernel finden, der das mitmacht).
Zuletzt geändert von nezzcarth am Dienstag 4. Februar 2025, 08:26, insgesamt 1-mal geändert.
Benutzeravatar
noisefloor
User
Beiträge: 4035
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Genau das meinte ich - war gestern nur zu faul, zu rechnen :-) Die beiden IMHO gängigsten Dateisysteme - NTFS für Win und ext4 für Linux - können max 16TB. Das werden dann ganz schön viele Dateien mit Passwörtern ;-)

Gruß, noisefloor
Antworten