• Hier ein Script zum Lösen der hier gestellten Aufgabe.
    Es geht alle möglichen Lösungen durch.

    [autoit]

    #include <array.au3>

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

    $string = "lbootu ev ejftfo ufyu fouajggfso, eboo tdisfjcf efjof bouxpsu kfuau"
    $string_array = stringsplit($string,"")

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

    $alphabet = "abcdefghijklmnopqrstuvwxyz"
    $alphabet_array = stringsplit($alphabet,"")

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

    DIM $loesungen[stringlen($alphabet)+1][stringlen($string)+1]

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

    For $c = 1 To StringLen($alphabet)

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

    For $e = 1 To stringlen($string)

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

    For $i = 1 To StringLen($alphabet)

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

    If $string_array[$e] = " " Then
    $loesungen[$c][$e] = " "
    ExitLoop
    EndIf

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

    If $string_array[$e] = $alphabet_array[$i] Then

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

    $caesar = $c + $i
    If $caesar > 26 Then
    $caesar = $caesar -26
    EndIf

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

    $loesungen[$c][$e] = $alphabet_array[$caesar]
    ExitLoop
    EndIf
    Next

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

    Next

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

    Next

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

    Dim $loes_les[StringLen($alphabet)+1]
    For $k = 1 To StringLen($alphabet)
    $loes_les[$k] = $k &": "
    For $l = 1 To Stringlen($string)
    $loes_les[$k] = $loes_les[$k] & $loesungen[$k][$l]
    Next
    Next

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

    For $o = 1 To stringlen($alphabet)
    MsgBox(0,"Lösungen",$loes_les[$o])
    Next

    [/autoit]

    P.S.: Ja, ich hätt mir einige Schleifen sparen können (bzw. der Ausgabe), aber ich denke so ist es besser "wiederverwertbar" ;)

  • Hab mal die Vigenère-Chiffre geschrieben, entschlüsseln kann mans aber noch nicht :)

    Spoiler anzeigen
    [autoit]

    $Text = _Vigenere_Chiffre("geheimnis", "AKEY")
    MsgBox(0, "", $Text)

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

    Func _Vigenere_Chiffre($sText, $sKey)
    Local $sAlphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', $sCryptText = ''
    For $i = 1 To StringLen($sText)
    $iKeyPos = Mod($i, StringLen($sKey))
    If $iKeyPos = 0 Then $iKeyPos = StringLen($sKey)
    $sCryptText &= StringMid($sAlphabet, Mod(StringInStr($sAlphabet, StringMid($sText, $i, 1)) + StringInStr($sAlphabet, StringMid($sKey, $iKeyPos, 1)) - 1, 26), 1)
    Next
    Return $sCryptText
    EndFunc ;==>_Vigenere_Chiffre

    [/autoit]
  • Und hier dann noch eine "kurze" Version vom Cäsar Chiffre.

    Spoiler anzeigen
    [autoit]

    $String = "lbootu ev ejftfo ufyu fouajggfso, eboo tdisfjcf efjof bouxpsu kfuau"

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

    For $i = 0 To 26
    MsgBox(0, $i & " Buchstaben verschoben.", _CaesarChiffre($String, $i))
    Next

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

    Func _CaesarChiffre($sString, $iStep)
    Local $aString = StringSplit($sString, "", 3), $sResult
    For $i = 0 To UBound($aString) - 1
    Local $iAsc = Asc($aString[$i]), $iLower = (($iAsc >= 97) And ($iAsc <= 122)) * 97 + (($iAsc >= 65) And ($iAsc <= 90)) * 65
    If $iLower Then
    If $iAsc + $iStep >= $iLower + 26 Then $iAsc -= 26
    $iAsc += $iStep
    EndIf
    $sResult &= Chr($iAsc)
    Next
    Return $sResult
    EndFunc ;==>_CaesarChiffre

    [/autoit]
  • Diese Venigère-Chiffre hat auch noch einen Autokey-Verschlüsselungs-Modus. Habe den nun auch noch eingebaut.

    Spoiler anzeigen
    [autoit]

    $Text = _Vigenere_Chiffre("geheimnis", "AKEY", False)
    MsgBox(0, "", $Text)

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

    $Text = _Vigenere_Chiffre("geheimnis", "AKEY", True)
    MsgBox(0, "", $Text)

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

    Func _Vigenere_Chiffre($sText, $sKey, $sAutoKey = False)
    Local $sAlphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', $sCryptText = ''
    For $i = 1 To StringLen($sText)
    If $sAutoKey = False Then
    $iKeyPos = Mod($i, StringLen($sKey))
    If $iKeyPos = 0 Then $iKeyPos = StringLen($sKey)
    $sCurrKey = StringMid($sKey, $iKeyPos, 1)
    ElseIf $sAutoKey = True Then
    $sCurrKey = StringMid($sKey, $i, 1)
    If $i > StringLen($sKey) Then $sCurrKey = StringMid($sText, $i - StringLen($sKey), 1)
    EndIf
    $sCryptText &= StringMid($sAlphabet, Mod(StringInStr($sAlphabet, StringMid($sText, $i, 1)) + StringInStr($sAlphabet, $sCurrKey) - 1, 26), 1)
    Next
    Return $sCryptText
    EndFunc ;==>_Vigenere_Chiffre

    [/autoit]
  • Das mit der Vigenère Chiffre Entschlüsselung war auch mehr ein Scherz. :D Ich glaube sowas ist verdammt schwer umzusetzen, da das Programm nicht einfach mal eben alle Möglichkeiten ausgeben kann. :P Für gewöhnlich macht man das doch indem man den häufigsten Buchstaben der deutschen Sprache mit dem häufigsten Buchstaben des verschlüsselten Textes vergleicht, oder? Zumindest fängt man so an... Sobald aber der Text zu kurz ist, oder der Schlüssel fast so lang oder gleich lang wie der Text ist kann man eine Entschlüsselung wohl vergessen.

  • Ja, du kannst die Anzahl der möglichen Lösungen errechnen ( man hat das gedauert bis ich deinen satz verstanden hatte ^^ ).

    Aber dieses Programm gibt auch gleich alle möglichen Cäsar Verschlüsselungen (und damit auch Entschlüsselungen) des oben definierten Strings ($string) aus ;)