Seite 2 von 2
Re: Kennworterzeugung anpassen
Verfasst: Montag 6. Januar 2014, 15:24
von BlackJack
@Marek06: Das ist immer noch furchtbar kompliziert und ich verstehe auch immer noch nicht was das mit `number` werden soll. Ich habe so das Gefühl das erfüllt zwar die tatsächlichen Anforderungen, schränkt aber deutlich zu stark ein. Was sind denn die Einschränkungen? Sinn machen würde 8 Zeichen und dabei mindestens ein Zeichen aus den Gruppen Kleinbuchstaben, Grossbuchstaben, Ziffern, Sonderzeichen (Interpunktion). Da gäbe es aber deutlich mehr Möglichkeiten als Dein Code erzeugt, der wäre dann also unnötig einschränkend. Und wie gesagt: Zu kompliziert.
Edit:
Code: Alles auswählen
def generate_password(length=8):
groups = [
string.lowercase, string.uppercase, string.digits, string.punctuation
]
result = [random.choice(g) for g in groups]
all_characters = ''.join(groups)
result.extend(
random.choice(all_characters) for _ in range(length - len(result))
)
random.shuffle(result)
return ''.join(result)[:length]
Re: Kennworterzeugung anpassen
Verfasst: Montag 6. Januar 2014, 15:37
von Sirius3
Warum erzeugst Du erst Listen von Strings, dann einen String um dann wieder daraus eine Liste zu machen (es gibt übrigens »list« dafür)?
Wenn man alles zusammenfasst, kommt ungefähr das raus:
Code: Alles auswählen
import string
import random
def generate_password(length):
sets = [string.uppercase, string.lowercase, string.digits, string.punctuation]
sets2 = [''.join(sets[:-1])]+random.sample(sets + [''.join(sets)]*(length-len(sets)-1), length-1)
return ''.join(map(random.choice, sets2))
Re: Kennworterzeugung anpassen
Verfasst: Dienstag 7. Januar 2014, 08:25
von Marek06
Folgende Konventionen sind gefordert:
1. Das 1 Zeichen darf nur Großbuchstabe, Kleinbuchstabe, Zahl sein
2. Genau 8 Zeichen
3. Insgesamt muss im Kennwort 1 Kleinbuchstabe, Großbuchstabe, Zahl, Zeichen vorhanden sein
Mit dem Attribut 'number' wollte ich sicher, dass ich z.B nicht festlege - immer 3 Großbuchstabe oder 3 Kleinbuchstaben oder 3 Zahlen - sondern das jedesmal variable erzeugt wird. Und mit der 2 Liste wollte ich sicher gehen, dass alle 7 Zeichen und nicht die Blöcke gemischt werden (außer das 1 Zeichen).
Die anderen Lösungen sehen auf jeden Fall kürzer und besser aus.

Re: Kennworterzeugung anpassen
Verfasst: Dienstag 7. Januar 2014, 12:35
von EyDu
Marek06 hat geschrieben:Mit dem Attribut 'number' wollte ich sicher, dass ich z.B nicht festlege - immer 3 Großbuchstabe oder 3 Kleinbuchstaben oder 3 Zahlen - sondern das jedesmal variable erzeugt wird. Und mit der 2 Liste wollte ich sicher gehen, dass alle 7 Zeichen und nicht die Blöcke gemischt werden (außer das 1 Zeichen).
Die Intention hinter deinem Gedanken ist schon klar, du hast dir bei deiner Umsetzung nur nicht genügend Gedanken über die Folgen gemacht. Durch deinen Ansatz gehen nämlich unglaublich viele Kombinationen verloren, welche sonst möglich wären. Und damit werden deine Kennwörter viel leichter vorhersagbar.
Vielleicht einfach an einem Beispiel. Angenommen du hast zwei Mengen von Zeichen: die Menge N mit n verschiedenen Zeichen und die Menge M mit m verschiedenen Zeichen. Das Kennwort soll mindestens 5 Zeichen lang sein und mindestens eine Zeichen aus M und aus N enthalten. Wählt man die Verteilung bei dir, so könnte man einfach sagen: gut 3 Zeichen für n und zwei Zeichen für m oder umgekehrt. Damit hast du dann n³+m² + n²+m³ mögliche Kombinationen dabei vergisst du aber, dass noch n+m⁴, und n⁴+m möglich sind. Das sieht jetzt auf den ersten Blick nicht nach viel aus, aber in diesem Fall würdest du einfach mal einen riesigen Batzen an Möglichkeiten wegwerfen. Bereits bei relativ kleinen n und m werden n⁴ und m⁴ deutlich größer als n³+m² + n²+m³ und dominieren vollständig. D.h., du verlierst die überwiegenden Anteil an Kombinationen. Wenn jemand die Verteilung der Anzahlen kennt, dann ist es ein Leichtes die Kennwörter zu raten.