Seite 1 von 1

Erzeugen lesbarer Passwörter

Verfasst: 25.10.2015 21:28
von TroaX
Ich habe ein wenig hin und her überlegt, wie man einen Passwortgenerator bauen könnte, damit man einigermaßen lesbare Passwörter bekommt. Mein erster Ansatz arbeitet mit Wordpattern und gibt so den Aufbau des Strings grob vor. Ansich funktioniert es. Aber ich versuche gerade noch eine Unterteilung von Buchstabenkombinationen zu etablieren. Denn Momentan kommen noch ziemlich abstrakte Gebilde raus.

Hier einmal mein Ansatz:

Code: Alles auswählen

EnableExplicit

Procedure.s RandomReadableString()
  Dim WordPattern.s(3)
  Dim Consonants.s(20)
  Dim Vocals.s(4)
  Dim SpecialChars.s(7)
  Dim Combinations.s(12)
  
  WordPattern(0) = "cvccvcsdddd"
  WordPattern(1) = "xvvcvcvddds"
  WordPattern(2) = "xvxvvcvcsdds"
  WordPattern(3) = "vcvvxvdcvcvsd"
  
  Consonants(0) = "B"
  Consonants(1) = "C"
  Consonants(2) = "D"
  Consonants(3) = "F"
  Consonants(4) = "G"
  Consonants(5) = "H"
  Consonants(6) = "J"
  Consonants(7) = "K"
  Consonants(8) = "L"
  Consonants(9) = "M"
  Consonants(10) = "N"
  Consonants(11) = "P"
  Consonants(12) = "Q"
  Consonants(13) = "R"
  Consonants(14) = "S"
  Consonants(15) = "T"
  Consonants(16) = "V"
  Consonants(17) = "W"
  Consonants(18) = "X"
  Consonants(19) = "Y"
  Consonants(20) = "Z"
  
  Vocals(0) = "A"
  Vocals(1) = "E"
  Vocals(2) = "I"
  Vocals(3) = "O"
  Vocals(4) = "U"
  
  SpecialChars(0) = "#"
  SpecialChars(1) = "."
  SpecialChars(2) = ":"
  SpecialChars(3) = "-"
  SpecialChars(4) = "_"
  SpecialChars(5) = "+"
  SpecialChars(6) = "?"
  SpecialChars(7) = "!"
  
  Combinations(0) = "st"
  Combinations(1) = "sp"
  Combinations(2) = "pl"
  Combinations(3) = "sch"
  Combinations(4) = "ch"
  Combinations(5) = "ll"
  Combinations(6) = "ss"
  Combinations(7) = "tt"
  Combinations(8) = "nn"
  Combinations(9) = "mm"
  Combinations(10) = "ck"
  Combinations(11) = "schl"
  Combinations(12) = "kr"
  
  Define PatternCount.i = ArraySize(WordPattern())
  Define ConsonantsCount.i = ArraySize(Consonants())
  Define VocalsCount.i = ArraySize(Vocals())
  Define SpecialCharsCount.i = ArraySize(SpecialChars())
  Define CombinationsCount.i = ArraySize(Combinations())
  
  Define Patternstring.s = WordPattern(Random(PatternCount,0))
  Define CurrentChar.s
  Define x.i
  
  Define GeneratedString.s = ""
  
  For x = 0 To Len(Patternstring)
    CurrentChar = Mid(Patternstring,x+1,1)
    Select CurrentChar
      Case "v"
        GeneratedString = GeneratedString + LCase(Vocals(Random(VocalsCount,0)))
      Case "c"
        GeneratedString = GeneratedString + LCase(Consonants(Random(VocalsCount,0)))
      Case "s"
        GeneratedString = GeneratedString + LCase(SpecialChars(Random(SpecialCharsCount,0)))
      Case "x"
        GeneratedString = GeneratedString + LCase(Combinations(Random(CombinationsCount,0)))
      Case "d"
        GeneratedString = GeneratedString + Str(Random(9,0))
      Default
        Break
    EndSelect
  Next
  ProcedureReturn GeneratedString    
EndProcedure


OpenConsole()
PrintN(RandomReadableString())
Input()
Ebenfalls noch geplant ist die Möglichkeit, auch mit Leetspeak zu arbeiten.

Hat da vielleicht noch wer eine Anregung, bevor ich weitermache oder wäre ein komplett anderer Ansatz besser?

Re: Erzeugen lesbarer Passwörter

Verfasst: 26.10.2015 01:34
von NicTheQuick
Du könntest jedenfalls alle Arrays außer Combinations durch einfache Strings ersetzen und mit Mid() auf die einzelnen Buchstaben zugreifen. Das wäre wesentlich einfacher und Cache-effizienter.
Da ich aber kein PB auf dem Handy habe, kann ich sonst gerade nicht viel dazu sagen.

Re: Erzeugen lesbarer Passwörter

Verfasst: 26.10.2015 08:48
von TroaX
Hmmm stimmt eigentlich. Danke für den Tip

Re: Erzeugen lesbarer Passwörter

Verfasst: 26.10.2015 11:15
von NicTheQuick
Mir fällt noch ein, dass der Ansatz mit Silben glaube ich immer gut funktioniert hat. Das heißt, du baust dir eine Liste aller möglichen Silben und reihst die einfach zufällig aneinander. Das sollte auch immer gut aussprechbar sein. Zudem könntest du dann z.B. immer alle zwei Silben einen Großbuchstaben setzen, z.B. "PackgeBlaunet".

Und denk innerhalb deiner Procedure noch daran das Schlüsseltwort "Protected" zu nutzen, wenn die Variablen oder Arrays lokal sind. Siehe auch mein Tutorial: [PB] Grundlegende Schlüsselwörter

Re: Erzeugen lesbarer Passwörter

Verfasst: 26.10.2015 12:06
von TroaX
Das mit den Schlüsselwörtern mache ich ja auch im Regelfall. Das ist doch nur der erste Entwurf und da der Code nur einmal ausgeführt wird, geht das ja noch alles glatt. :D