• Hoi,

    hab mich gestern mal rangesetzt und ne Vigenere-Ver-/Entschlüsslung gebaut.

    Nach ca 2 Jahren immer mal wieder testen, hab ich rausgefunden, dass man dieses Quadrat überhaupt nicht braucht ( :whistling: ).

    Spoiler anzeigen
    [autoit]

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

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

    $GUI = GUICreate("Vigenere", 463, 251, 276, 180)
    $string = GUICtrlCreateInput("geheimnis", 16, 24, 425, 21)
    $keys = GUICtrlCreateInput("akey", 16, 216, 241, 21)
    $Label1 = GUICtrlCreateLabel("String:", 16, 8, 34, 15)
    $Label2 = GUICtrlCreateLabel("Key:", 16, 200, 25, 15)
    $encdec = GUICtrlCreateButton("Mach", 272, 216, 171, 21, $WS_GROUP)
    $enc1 = GUICtrlCreateInput("", 16, 72, 425, 21)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $dec1 = GUICtrlCreateInput("", 16, 120, 425, 21)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Label3 = GUICtrlCreateLabel("Encoded:", 16, 56, 50, 15)
    $Label4 = GUICtrlCreateLabel("Decoded", 16, 104, 48, 15)
    $Label5 = GUICtrlCreateLabel("Verwendeter Key:", 16, 152, 88, 15)
    $genkey = GUICtrlCreateInput("", 16, 168, 425, 21)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUISetState(@SW_SHOW)

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

    Global $enc = 0
    Global $key, $txt, $opt

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $encdec
    ;text und key groß
    $txt = StringUpper(GUICtrlRead($string))
    $key = StringUpper(GUICtrlRead($keys))
    GUICtrlSetData($string, $txt)
    GUICtrlSetData($keys, $key)
    GUICtrlSetData($enc1, vig1($txt, $key, 1))
    GUICtrlSetData($dec1, vig1($txt, $key, 0))
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func vig1($txt, $key, $enc)
    Local $fin

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

    ;key generieren
    Do
    $key &= $key
    $lenkey = StringLen($key)
    $lentxt = StringLen($txt)
    Until $lenkey >= $lentxt

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

    $key = StringTrimRight($key, $lenkey - $lentxt)

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

    GUICtrlSetData($genkey, $key)

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

    ;verschlüsseln
    For $i = 1 To StringLen($txt)
    $fin &= vig2(StringMid($txt, $i, 1), StringMid($key, $i, 1), $enc)
    Next

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

    Return $fin
    EndFunc ;==>vig1

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

    ;hilfsfunktion
    Func vig2($tx, $ky, $enc)
    Local $tf

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

    If StringInStr("ABCDEFGHIJKLMNOPQRSTUVWYXZ", $tx) Then
    $tx = Asc($tx)
    $ky = Asc($ky)

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

    ;wenn $enc = 1 dann entschlüsseln
    If $enc = 1 Then $ky = Mod(26 - $ky, 26)

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

    $tf = Mod($tx + $ky, 26)
    $tf = Chr($tf + 65)
    Else
    $tf = $tx
    EndIf

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

    Return $tf
    EndFunc ;==>vig2

    [/autoit]

    Es wird immer in beiden Richtungen und mit komplett verwendetem Schlüssel angezeigt.

    P.S.: Ein Thema hierzu gibts schon, allerdings wurde mir vom Forum empfohlen, ein neues zu erstellen ;)

    Gruß,
    x0r

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.