PasswordCreator - Schleifenproblem

  • Hey,

    wollte einen kleinen PasswordCreator programmieren, was ja eig. kein Problem ist... O.o Hatte sowas früher mal im FirstLevelSupport gebraucht und dachte, ich schreib den mal nach, falls ich es wieder brauche xD...

    Aber ich habe einen Fehler, den ich einfach nicht sehe =.=...

    Diese Schleife macht mir Mucken:

    [autoit]

    For $i = 1 To GUICtrlRead($inpQuantity)
    Next

    [/autoit]

    Er geht sie einfach immer nur 1x durch, kA, für wie viele Werte, auch wenns $i = 1 To 3 ist z.B...
    Wenn ich jetzt aber z.B. 50 eingebe, dann geht er die Schleife kA wie oft durch, habe bei 70 aufgehört... xD

    Ich bin echt verwirrt, wo ich da einen Fehler habe *_*...! Und selbst, wenn er viele Passwörter kreiert, schreibt er nur eins in die Datei (FileWrite buggt bei mir eh immer rum, wenn ich das nutzen will, grml...)

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $sLowerLetter = "abcdefghijklmnopqrstvwxyz"
    Global $sUpperLetter = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    Global $sNumbers = "0123456789"
    Global $sSpecialCharacter = "()[]{}?!$%&/=*+~,.;:<>-_" ; Regulär nutzbare Sonderzeichen

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate("Password Creator by Acanis", 418, 354)
    GUICtrlCreateGroup("Options", 8, 8, 401, 337)
    GUICtrlCreateGroup("Case", 24, 32, 161, 105)
    $radMixed = GUICtrlCreateRadio("Mixed", 32, 56, 113, 17)
    GUICtrlSetState(-1, $GUI_Checked)
    $radUpper = GUICtrlCreateRadio("Upper", 32, 80, 113, 17)
    $radLower = GUICtrlCreateRadio("Lower", 32, 104, 113, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateGroup("Characters", 208, 32, 185, 177)
    $radAZ = GUICtrlCreateRadio("Use A to Z", 216, 56, 113, 17)
    GUICtrlSetState(-1, $GUI_Checked)
    $rad09 = GUICtrlCreateRadio("Use 0 to 9", 216, 80, 113, 17)
    $radAZ09 = GUICtrlCreateRadio("Use A to Z and 0 to 9", 216, 104, 145, 17)
    $radAny = GUICtrlCreateRadio("Use any valid character", 216, 128, 169, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateGroup("Length", 24, 152, 161, 57)
    $inpLength = GUICtrlCreateInput("8", 32, 176, 33, 24)
    GUICtrlCreateLabel("characters", 72, 176, 67, 20)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateGroup("Storage", 24, 224, 281, 105)
    $radClipboard = GUICtrlCreateRadio("Copy password to clipboard", 32, 248, 193, 17)
    GUICtrlSetState(-1, $GUI_Checked)
    $radFile = GUICtrlCreateRadio("Save it to file", 32, 272, 113, 17)
    $inpFile = GUICtrlCreateInput(@ScriptDir & "\pwd.txt", 150, 272, 130, 24)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlCreateLabel("and generate", 64, 300, 84, 20)
    $inpQuantity = GUICtrlCreateInput("1", 150, 300, 49, 24)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlCreateLabel("password(s)", 208, 300, 78, 20)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $butGenerate = GUICtrlCreateButton("Generate", 320, 240, 75, 25)
    GUICtrlSetState(-1, $GUI_FOCUS)
    $butClose = GUICtrlCreateButton("Close", 320, 280, 75, 25)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    While Sleep(50)
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $butClose
    ExitLoop
    Case $butGenerate
    _Generate()
    Case $radClipboard
    GUICtrlSetState($inpFile, $GUI_DISABLE)
    GUICtrlSetState($inpQuantity, $GUI_DISABLE)
    Case $radFile
    GUICtrlSetState($inpQuantity, $GUI_ENABLE)
    GUICtrlSetState($inpFile, $GUI_ENABLE)
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _Generate()
    Local $sString, $aPool, $sStringLine = ""

    [/autoit] [autoit][/autoit] [autoit]

    $aPool = StringRegExp(_Characters(), ".", 3)

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To GUICtrlRead($inpQuantity)
    $sString = ""

    [/autoit] [autoit][/autoit] [autoit]

    _ArrayShuffle($aPool)

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To GUICtrlRead($inpLength)
    $sString &= $aPool[Random(0, UBound($aPool) - 1, 1)]
    Next

    [/autoit] [autoit][/autoit] [autoit]

    $sStringLine &= $sString
    Next

    [/autoit] [autoit][/autoit] [autoit]

    _Output($sStringLine)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Characters()
    Local $sPool

    [/autoit] [autoit][/autoit] [autoit]

    If BitAnd(GuiCtrlRead($radAZ), $GUI_CHECKED) = $GUI_CHECKED Then
    $sPool = _Case()
    ElseIf BitAnd(GuiCtrlRead($rad09), $GUI_CHECKED) = $GUI_CHECKED Then
    $sPool = $sNumbers
    ElseIf BitAnd(GuiCtrlRead($radAZ09), $GUI_CHECKED) = $GUI_CHECKED Then
    $sPool = _Case() & $sNumbers
    Else ; $radAny
    $sPool = _Case() & $sNumbers & $sSpecialCharacter
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Return $sPool
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Case()
    Local $sPool

    [/autoit] [autoit][/autoit] [autoit]

    If BitAnd(GuiCtrlRead($radUpper), $GUI_CHECKED) = $GUI_CHECKED Then
    $sPool = $sUpperLetter
    ElseIf BitAnd(GuiCtrlRead($radLower), $GUI_CHECKED) = $GUI_CHECKED Then
    $sPool = $sLowerLetter
    Else
    $sPool = $sUpperLetter & $sLowerLetter
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Return $sPool
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Output($sString)
    Local $aStrings

    [/autoit] [autoit][/autoit] [autoit]

    $aStrings = StringRegExp($sString, '.{' & GUICtrlRead($inpLength) & '}', 3)

    [/autoit] [autoit][/autoit] [autoit]

    If BitAnd(GuiCtrlRead($radFile), $GUI_CHECKED) = $GUI_CHECKED Then
    $hFile = FileOpen(GuiCtrlRead($inpFile), 1)
    For $i = 0 To UBound($aStrings) - 1
    FileWrite($hFile, $aStrings[$i] & @CRLF)
    Next
    FileClose($hFile)
    Else
    ClipPut($aStrings[0])
    MsgBox(4096, "Password generated", "The password " & @CRLF & @CRLF & $aStrings[0] & @CRLF & @CRLF & "was copied to your clipboard.")
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _ArrayShuffle(ByRef $aArray) ; Author: L3viathan2142 (l3viathan2142.de)
    $n = UBound($aArray) - 1
    while $n > 1
    $k = Random(0, $n-1, 1)
    $tmp = $aArray[$n]
    $aArray[$n] = $aArray[$k]
    $aArray[$k] = $tmp
    $n -= 1
    WEnd
    EndFunc

    [/autoit]


    LG,
    Aca

    Einmal editiert, zuletzt von Acanis (24. September 2012 um 18:00)

  • Ich gehe mal stark davon aus, dass es als String zurück gegeben wird.
    Füg einfach noch Execute ein:

    [autoit]

    For $i = 1 To Execute(GUICtrlRead($inpQuantity))
    Next

    [/autoit]
  • Das ist mir schon öfter passiert, habe ich aber echt nicht geprüft :D...

    Aber leider war es nicht das Problem... Habe es mit Execute() und Number() versucht...^^
    Wenn ich ne MsgBox einbaue, taucht die trotzdem nur 1x auf, egal was ich ins Input eintrage...


    LG,
    Aca

  • Versuche es mal hiermit:

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $sLowerLetter = "abcdefghijklmnopqrstvwxyz"
    Global $sUpperLetter = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    Global $sNumbers = "0123456789"
    Global $sSpecialCharacter = "()[]{}?!$%&/=*+~,.;:<>-_" ; Regulär nutzbare Sonderzeichen

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate("Password Creator by Acanis", 418, 354)
    GUICtrlCreateGroup("Options", 8, 8, 401, 337)
    GUICtrlCreateGroup("Case", 24, 32, 161, 105)
    $radMixed = GUICtrlCreateRadio("Mixed", 32, 56, 113, 17)
    GUICtrlSetState(-1, $GUI_Checked)
    $radUpper = GUICtrlCreateRadio("Upper", 32, 80, 113, 17)
    $radLower = GUICtrlCreateRadio("Lower", 32, 104, 113, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateGroup("Characters", 208, 32, 185, 177)
    $radAZ = GUICtrlCreateRadio("Use A to Z", 216, 56, 113, 17)
    GUICtrlSetState(-1, $GUI_Checked)
    $rad09 = GUICtrlCreateRadio("Use 0 to 9", 216, 80, 113, 17)
    $radAZ09 = GUICtrlCreateRadio("Use A to Z and 0 to 9", 216, 104, 145, 17)
    $radAny = GUICtrlCreateRadio("Use any valid character", 216, 128, 169, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateGroup("Length", 24, 152, 161, 57)
    $inpLength = GUICtrlCreateInput("8", 32, 176, 33, 24)
    GUICtrlCreateLabel("characters", 72, 176, 67, 20)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateGroup("Storage", 24, 224, 281, 105)
    $radClipboard = GUICtrlCreateRadio("Copy password to clipboard", 32, 248, 193, 17)
    GUICtrlSetState(-1, $GUI_Checked)
    $radFile = GUICtrlCreateRadio("Save it to file", 32, 272, 113, 17)
    $inpFile = GUICtrlCreateInput(@ScriptDir & "\pwd.txt", 150, 272, 130, 24)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlCreateLabel("and generate", 64, 300, 84, 20)
    $inpQuantity = GUICtrlCreateInput("1", 150, 300, 49, 24)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlCreateLabel("password(s)", 208, 300, 78, 20)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $butGenerate = GUICtrlCreateButton("Generate", 320, 240, 75, 25)
    GUICtrlSetState(-1, $GUI_FOCUS)
    $butClose = GUICtrlCreateButton("Close", 320, 280, 75, 25)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    While Sleep(50)
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $butClose
    ExitLoop
    Case $butGenerate
    _Generate()
    Case $radClipboard
    GUICtrlSetState($inpFile, $GUI_DISABLE)
    GUICtrlSetState($inpQuantity, $GUI_DISABLE)
    Case $radFile
    GUICtrlSetState($inpQuantity, $GUI_ENABLE)
    GUICtrlSetState($inpFile, $GUI_ENABLE)
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _Generate()
    Local $sString, $aPool, $sStringLine = ""

    [/autoit] [autoit][/autoit] [autoit]

    $aPool = StringRegExp(_Characters(), ".", 3)

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To GUICtrlRead($inpQuantity)
    $sString = ""

    [/autoit] [autoit][/autoit] [autoit]

    _ArrayShuffle($aPool)

    [/autoit] [autoit][/autoit] [autoit]

    For $ii = 1 To GUICtrlRead($inpLength)
    $sString &= $aPool[Random(0, UBound($aPool) - 1, 1)]
    Next

    [/autoit] [autoit][/autoit] [autoit]

    $sStringLine &= $sString
    Next

    [/autoit] [autoit][/autoit] [autoit]

    _Output($sStringLine)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Characters()
    Local $sPool

    [/autoit] [autoit][/autoit] [autoit]

    If BitAnd(GuiCtrlRead($radAZ), $GUI_CHECKED) = $GUI_CHECKED Then
    $sPool = _Case()
    ElseIf BitAnd(GuiCtrlRead($rad09), $GUI_CHECKED) = $GUI_CHECKED Then
    $sPool = $sNumbers
    ElseIf BitAnd(GuiCtrlRead($radAZ09), $GUI_CHECKED) = $GUI_CHECKED Then
    $sPool = _Case() & $sNumbers
    Else ; $radAny
    $sPool = _Case() & $sNumbers & $sSpecialCharacter
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Return $sPool
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Case()
    Local $sPool

    [/autoit] [autoit][/autoit] [autoit]

    If BitAnd(GuiCtrlRead($radUpper), $GUI_CHECKED) = $GUI_CHECKED Then
    $sPool = $sUpperLetter
    ElseIf BitAnd(GuiCtrlRead($radLower), $GUI_CHECKED) = $GUI_CHECKED Then
    $sPool = $sLowerLetter
    Else
    $sPool = $sUpperLetter & $sLowerLetter
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Return $sPool
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Output($sString)
    Local $aStrings

    [/autoit] [autoit][/autoit] [autoit]

    $aStrings = StringRegExp($sString, '.{' & GUICtrlRead($inpLength) & '}', 3)

    [/autoit] [autoit][/autoit] [autoit]

    If BitAnd(GuiCtrlRead($radFile), $GUI_CHECKED) = $GUI_CHECKED Then
    $hFile = FileOpen(GuiCtrlRead($inpFile), 1)
    For $i = 0 To UBound($aStrings) - 1
    FileWrite($hFile, $aStrings[$i] & @CRLF)
    Next
    FileClose($hFile)
    Else
    ClipPut($aStrings[0])
    MsgBox(4096, "Password generated", "The password " & @CRLF & @CRLF & $aStrings[0] & @CRLF & @CRLF & "was copied to your clipboard.")
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _ArrayShuffle(ByRef $aArray) ; Author: L3viathan2142 (l3viathan2142.de)
    $n = UBound($aArray) - 1
    while $n > 1
    $k = Random(0, $n-1, 1)
    $tmp = $aArray[$n]
    $aArray[$n] = $aArray[$k]
    $aArray[$k] = $tmp
    $n -= 1
    WEnd
    EndFunc

    [/autoit]

    Du hast zwei for Next schleifen verschachtelt und für beide $i benützt, ich nehme an das es daran lag

  • OH MEIN GOTT xD...

    Natürlich war es das... Danke *_*... Wie blind man manchmal bei eigenem Code ist...


    Danke xD!


    LG,
    Aca

  • Zitat
    [autoit]

    For $i = 1 To Execute(GUICtrlRead($inpQuantity))
    Next

    [/autoit]

    Mensch Make-Grafik... :whistling: Das könnte man ja fast schon als Beispiel, für sicherheitskritische Programmier-Fehler verwenden... :thumbup:

    LG
    Christoph :)