Passwortabfrage mit Problemen über .ini-Datei

  • Zuerstmal das Script

    Spoiler anzeigen
    [autoit]

    #cs Beschreibung
    Ich habe hier ein Script, welches ein Passwort abfragt, um den Rest des Scriptes weiter ausführenzukönnen
    (Die restliche Ausführung im Script kommt natürlich erst rein, wenn es Fertig ist ;))
    #ce

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

    #include

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Passwortabfrage", 338, 188, 193, 125)
    $Input1 = GUICtrlCreateInput("", 24, 40, 241, 21,"*")
    $Input2 = GUICtrlCreateInput("", 24, 120, 241, 21,"*")
    $Button1 = GUICtrlCreateButton("Weiter", 24, 152, 105, 33)
    $Button2 = GUICtrlCreateButton("Abbruch", 160, 152, 105, 33)
    $Passworteigeben = GUICtrlCreateLabel("Passwort", 24, 8, 109, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $Passwortwiederholen = GUICtrlCreateLabel("Passwort wiederholen", 24, 80, 132, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    $res1 = $Input1
    $res2 = $Input2

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

    ;Das Passwort "passwort" ist nur sporadisch gedacht und hat keinerlei Hintergrund
    ;(diese erstellte .ini-Datei hat ebenso keinerlei Hintergrund....[Das spätere Passwort wird in das kompilierte Script installiert und soll versteckt bleiben, damit man dieses Script nur mit meinem Wissen anwenden kann])
    If Not FileExists("pws.ini") Then
    IniWrite("pws.ini","Allgemein","PW","passwort")
    EndIf

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

    ;Halt was wie wo passieren soll......
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $Input1
    If IniRead("pws.ini","Allgemein","PW","passwort") <> $res1 Then
    GUICtrlCreatePic("C:\Users\User\Pictures\Icons für AutoIT\kreuz.jpg", 272, 32, 41, 33)
    ElseIf IniRead("pws.ini","Allgemein","PW","passwort") = $res1 Then
    GUICtrlCreatePic("C:\Users\User\Pictures\Icons für AutoIT\richtig-haken.jpg", 272, 32, 41, 33)
    EndIf
    Case $Input2
    If IniRead("pws.ini","Allgemein","PW","passwort") = $res2 Then
    GUICtrlCreatePic("C:\Users\User\Pictures\Icons für AutoIT\richtig-haken.jpg", 272, 112, 41, 41)
    ElseIf IniRead("pws.ini","Allgemein","PW","passwort") <> $res2 Then
    GUICtrlCreatePic("C:\Users\User\Pictures\Icons für AutoIT\kreuz.jpg", 272, 112, 41, 41)
    EndIf
    Case $Button1
    WinClose("Passwortabfrage")
    If $Input1 & $Input2 <> IniRead("pws.ini","Allgemein","PW","passwort") Then Exit

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

    Case $Button2
    Exit
    EndSwitch
    WEnd

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

    ;Natürlich ist dies auch sporadisch gedacht
    MsgBox(64,"","Es hat funktioniert")

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

    #cs
    Koords der Pics für Gleichstellung beider Bilder pro Pictureanweisung
    GUICtrlCreatePic("C:\Users\User\Pictures\Icons für AutoIT\kreuz.jpg", 272, 32, 41, 33)
    GUICtrlCreatePic("C:\Users\User\Pictures\Icons für AutoIT\richtig-haken.jpg", 272, 112, 41, 41)
    #ce

    [/autoit]


    Hier die Bilderlinks

    Spoiler anzeigen

    Ich wollte eigentlich eine Passwortsicherung für bestimmte Scripte, damit nicht jeder Zugriff darauf hat, aber es wirft mi Probleme auf:
    1. Die Pictures werden nicht richtig angewannt, wenn das Passwort mit der ini.Datei übereinstimmt
    2. Um das Script fortzusetzten, muss der Butten "Weiter" gedrückt werden. Es soll aber nur dann vortgeführt werden, wenn die Passwörter mit dem aus der ini.Datei und der Inputboxen übereinstimmen.(Die Überprüfungen unter den Input-Variablen sollen nur für die Pictures zuständig sein, welche bei Richtig oder Falsch zugeordnet und verwendet werden sollen)
    3. Hinzu zeigt mir die Ausführungskontrolle einen Fehler an, wenn ich eine weitere Func unter den Button "Abbruch" setzte.(Diese soll über den Button "A" auf der Tastatur funktionieren)

    Dann hätt ich noch die bitte, mir den Verlauf einer Passwortverschlüsselung in bzw für die .ini-Datei(diese Verschüsselung mit MDL5hash oder so...) oder der Verschlüsselung der .ini-Datei unter Eigenschaften --> Attribute --> Erweitert --> Datei verschlüssen(wird bei mir als grau abgestuft und daher kann ch diese nicht aktivieren. Ich wüsste halt gern, woran das liegen könnte)

    Gruß
    (Sry wenn es etwas unverständlich ausgedrückt sein sollte)

    Einmal editiert, zuletzt von Tutendorf (11. Juli 2011 um 00:48)

  • Ich habs dir mal einigermaßen so gebastelt wie dus haben willst.
    Evtl etwas verwirrend wegen den vielen Kommentaren, aber wenn du Fragen hast stell sie einfach ;)

    Spoiler anzeigen
    [autoit]

    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>

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

    $Form1 = GUICreate("Passwortabfrage", 338, 188, 193, 125)
    $Input1 = GUICtrlCreateInput("", 24, 40, 241, 21, $ES_PASSWORD)
    ;~ $Input2 = GUICtrlCreateInput("", 24, 120, 241, 21, $ES_PASSWORD)
    $Button1 = GUICtrlCreateButton("Weiter", 24, 152, 105, 33)
    $Button2 = GUICtrlCreateButton("Abbruch", 160, 152, 105, 33)
    $Passworteigeben = GUICtrlCreateLabel("Passwort", 24, 8, 109, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    ;~ $Passwortwiederholen = GUICtrlCreateLabel("Passwort wiederholen", 24, 80, 132, 20)
    ;~ GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $Pic = GUICtrlCreatePic("", 272, 32, 41, 33)
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

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

    ;~ der einfachheit halber hab ich dein passwort mal in ne Variable gespeichert
    $passwort = "passwort"

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

    ;Halt was wie wo passieren soll......
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Input1 ; das war vorher unschön^^
    If $passwort <> GUICtrlRead($Input1) Then
    GUICtrlSetImage($Pic, @ScriptDir & "\kreuz.jpg")
    ; Entweder es ist falsch, oder es ist richtig, du brauchst also nur ein Else
    Else
    GUICtrlSetImage($Pic, @ScriptDir & "\richtig-haken.jpg")
    EndIf
    ; 2 inputs machen für mich keinen Sinn, wenn er es beim ersten mal richtig eingibt sieht er das ja,
    ; dann braucht er es ja nicht nochmal eingeben oder?
    ;~ Case $Input2
    ;~ If IniRead("pws.ini", "Allgemein", "PW", "passwort") = $res2 Then
    ;~ GUICtrlCreatePic("C:\Users\User\Pictures\Icons für AutoIT\richtig-haken.jpg", 272, 112, 41, 41)
    ;~ ElseIf IniRead("pws.ini", "Allgemein", "PW", "passwort") <> $res2 Then
    ;~ GUICtrlCreatePic("C:\Users\User\Pictures\Icons für AutoIT\kreuz.jpg", 272, 112, 41, 41)
    ;~ EndIf
    Case $Button1
    ;~ funktionieren würde die Abfrage wenn dann so:
    ;~ If $Input1 <> $passwort Or $Input2 <> $passwort Then Exit
    ;~ und nicht so wie dus hattest:
    ;~ If $Input1 & $Input2 <> IniRead("pws.ini", "Allgemein", "PW", "passwort") Then Exit
    If $passwort = GUICtrlRead($Input1) Then
    GUIDelete($Form1)
    ExitLoop ; so macht er nach der While Wend schleife weiter
    Else
    MsgBox(0,"", "Weiter gehts erst mit richtigen Passwort!")
    EndIf
    Case $Button2
    Exit
    EndSwitch
    WEnd

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

    ;Natürlich ist dies auch sporadisch gedacht
    MsgBox(64, "", "Es hat funktioniert")

    [/autoit]
  • Hi!


    zu der Verschlüsselung

    Spoiler anzeigen
    [autoit]

    ;===================================================================================================================================#
    ;~ Function Name......: VerEnd_S($sEncDec, $sPass)
    ;~ Description........: Verschlüsselung von String´s
    ;
    ;~ $sEncDec...........: String der Verschlüsselt werden soll
    ;~ $sPass.............: Verslüsselung metode ( Passwor ) kann leer gelassen werden
    ;
    ;~ Return Value(s)....: Erfolg String mit der Verschlüsslung
    ;
    ;~ Author(s).........: Kleiner27 (http://www.autoit.de)
    ;====================================================================================================================================#
    Func VerEnd_S($sEncDec, $sPass)
    If Not StringLen($sPass) Then $sPass = 'abcdefghijklmnopqrstuvwxyz'
    If Not StringLen($sEncDec) Then Return ''
    Local $iEncDec, $iPass, $UB, $UB_1, $UB_2
    $UB = StringLen($sEncDec)
    $UB_1 = StringLen($sPass)
    For $i = 1 To $UB_1
    $iPass &= Asc(StringMid($sPass, $i, 1))
    Next
    $sPass = ''
    $UB_2 = Round($UB / StringLen($iPass)) + 1
    For $i = 0 To $UB_2
    $sPass &= $iPass
    Next
    For $i = 1 To $UB
    $iEncDec &= Chr(BitXOR(Asc(StringMid($sEncDec, $i, 1)), Asc(StringMid($sPass, $i, 1))))
    Next
    Return $iEncDec
    EndFunc ;==>VerEnd_S

    [/autoit]

    Lg kleiner

  • @ Schnitzel
    Ja, ich habe da noch eine Frage:
    Ich habe das Scipt jetzt etwas umgeändert; und es funktioniert schon wieder nicht so wie ich es will....

    Script
    [autoit]


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

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Passwortabfrage", 306, 114, 608, 433, BitOR($WS_CAPTION,$WS_BORDER))
    $Input1 = GUICtrlCreateInput("", 16, 16, 273, 21, $ES_PASSWORD)
    $Button1 = GUICtrlCreateButton("Weiter", 32, 80, 97, 25, 0)
    $Button2 = GUICtrlCreateButton("Abbruch", 176, 80, 97, 25, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    $pw = "pw"

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Input1
    If $Input1 <> $pw Then
    GUICtrlCreateLabel("Dein Passwort ist richtig!", 16, 48, 125, 17)
    GUICtrlSetColor(-1,0x00FF00)
    Else
    Global $false = GUICtrlCreateLabel("Dein Passwort ist falsch!", 160, 48, 131, 17)
    GUICtrlSetColor(-1,0xFF0000)
    EndIf
    Case $Button1
    If $pw <> GUICtrlRead($Input1) Then
    GUIDelete($Input1)
    ExitLoop
    EndIf
    Case $Button2
    Exit

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

    EndSwitch
    WEnd

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


    Diesmal liegt das Problem daran, dass der Text von den Labels auf der Form und in den Inputboxen gelöscht werden soll, wenn ich das falsche Passwort in die Box eingegeben habe.
    Hinzu kommt noch, dass er mir das falsche Label setzt, wenn ich das falsche bzw richtige Passwort setze.
    (Ich weiß, ich bin ein schwieriger Fall :rolleyes: [vorallem in meinen Ideen])

  • Ich denke mal so ^^

    Spoiler anzeigen
    [autoit]

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

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Passwortabfrage", 306, 114, 608, 433, BitOR($WS_CAPTION,$WS_BORDER))
    $Input1 = GUICtrlCreateInput("", 16, 16, 273, 21, $ES_PASSWORD)
    $Button1 = GUICtrlCreateButton("Weiter", 32, 80, 97, 25, 0)
    $Button2 = GUICtrlCreateButton("Abbruch", 176, 80, 97, 25, 0)
    $Label1 = GUICtrlCreateLabel("", 16, 48, 125, 17)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    $pw = "pw"

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Input1
    If GUICtrlRead($Input1) == $pw Then
    GUICtrlSetData($Label1, "Dein Passwort ist richtig!")
    GUICtrlSetColor($Label1,0x00FF00)
    Else
    GUICtrlSetData($Input1, "")
    GUICtrlSetData($Label1, "Dein Passwort ist falsch!")
    GUICtrlSetColor($Label1,0xFF0000)
    EndIf
    Case $Button1
    If $pw <> GUICtrlRead($Input1) Then
    GUIDelete($Input1)
    ExitLoop
    EndIf
    Case $Button2
    Exit
    EndSwitch
    WEnd

    [/autoit]