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 ( ).
Spoiler anzeigen
;Vigenere
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
$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)
Global $enc = 0
Global $key, $txt, $opt
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
Func vig1($txt, $key, $enc)
Local $fin
;key generieren
Do
$key &= $key
$lenkey = StringLen($key)
$lentxt = StringLen($txt)
Until $lenkey >= $lentxt
$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
Return $fin
EndFunc ;==>vig1
;hilfsfunktion
Func vig2($tx, $ky, $enc)
Local $tf
If StringInStr("ABCDEFGHIJKLMNOPQRSTUVWYXZ", $tx) Then
$tx = Asc($tx)
$ky = Asc($ky)
;wenn $enc = 1 dann entschlüsseln
If $enc = 1 Then $ky = Mod(26 - $ky, 26)
$tf = Mod($tx + $ky, 26)
$tf = Chr($tf + 65)
Else
$tf = $tx
EndIf
Return $tf
EndFunc ;==>vig2
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