Kryptographie: "Vigenère-Quadrat"

  • Moin-Moin.

    Oftmals wissen User ja nicht was sie scripten sollen und genauso oft ist die Frage nach dem "Wie kann man was codieren".

    Hat sich schon mal eine/r mit der "Kryptographie: Vigenère-Quadrat" Wikipedia auseinander gesetzt und ist das eigentlich mit AutoIt umzusetzen? Am besten na klar wenn man die Daten aus einer Datei auslesen könnte und die codierten Text auch in eine neue Datei schreibt. Also ohne GUI und nur ein Inputfeld für den Passwortsatz. Bei Passwortsatz sehe ich schon das Problem, denn in einem Satz sind Leerzeichen, die aber in dieser Art der Kryptographie gar nicht berücksichtigt wird.

    Als Anlage mal eine solte Tabelle, die aber unter dem Wikipedia-Link oben auch sichtbar ist, genauso wie das Verfahren.
    autoit.de/wcf/attachment/4665/

    Ich bin echt gespannt, ob es möglich ist und wer als erstes da dann eine Lösung finden.

    So, ich soll nun zur Arbeit. Um 9:00 ist Meeting und dann soll ich auch noch auf kurze Dienstreise.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Verschlüsseln:

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    $Alphabet = stringsplit("ABCDEFGHIJKLMNOPQRSTUVWXYZ","")
    _ArrayDelete($Alphabet, 0)
    Global $VigCypher[26][26]
    For $i = 0 to 25
    Global $icopy = $i
    VigFill($i)
    Next
    Func VigFill($offset)
    Dim $res[26]
    For $a = 0 to 25
    $VigCypher[$icopy][$a] = $Alphabet[Mod($a+$offset,26)]
    Next
    EndFunc

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

    $KeyWord = StringUpper(InputBox("keyword","keyword please"))
    $File = FileOpenDialog("select file to encrypt...","C;\","txt (*.txt)")
    $Text = FileRead($file)
    MsgBox(0,"text",$Text)
    $Text = StringRegExpReplace(StringUpper(StringStripCR($Text)),"[^:ABCDEFGHIJKLMNOPQRSTUVWXYZ:]","")
    $a = 1
    MsgBox(0,"text",$Text)
    $EncryptText=""
    While $a<StringLen($Text)
    For $i = 1 to StringLen($KeyWord)
    $KeyPlace = _ArraySearch($Alphabet,StringMid($KeyWord,$i,1))
    $TextPlace = _ArraySearch($Alphabet,StringMid($Text,$a,1))
    $EncryptText = $EncryptText&$VigCypher[$Keyplace][$TextPlace]
    $a+=1
    Next
    WEnd
    MsgBox(0,"",$EncryptText)
    ClipPut($EncryptText)
    MsgBox(0,"","Encrypted Text added to clipboard")

    [/autoit]

    Entschlüsseln:

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    $Alphabet = stringsplit("ABCDEFGHIJKLMNOPQRSTUVWXYZ","")
    _ArrayDelete($Alphabet, 0)
    Global $VigCypher[26][26]
    For $i = 0 to 25
    Global $icopy = $i
    VigFill($i)
    Next
    Func VigFill($offset)
    Dim $res[26]
    For $a = 0 to 25
    $VigCypher[$icopy][$a] = $Alphabet[Mod(26+$a-$offset,26)]
    Next
    EndFunc

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

    $KeyWord = StringUpper(InputBox("keyword","keyword please"))
    $File = FileOpenDialog("select file to decrypt...","C;\","txt (*.txt)")
    $Text = FileRead($file)
    MsgBox(0,"text",$Text)
    $Text = StringRegExpReplace(StringUpper(StringStripCR($Text)),"[^:ABCDEFGHIJKLMNOPQRSTUVWXYZ:]","")
    $a = 1
    MsgBox(0,"text",$Text)
    $DecryptText=""
    While $a<StringLen($Text)
    For $i = 1 to StringLen($KeyWord)
    $KeyPlace = _ArraySearch($Alphabet,StringMid($KeyWord,$i,1))
    $TextPlace = _ArraySearch($Alphabet,StringMid($Text,$a,1))
    $DecryptText = $DecryptText&$VigCypher[$Keyplace][$TextPlace]
    $a+=1
    Next
    WEnd
    MsgBox(0,"",$DecryptText)
    ClipPut($DecryptText)
    MsgBox(0,"","Decrypted Text added to clipboard")

    [/autoit]

    Knacken via Brute Force

    Spoiler anzeigen
    [autoit]


    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Compression=0
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <Array.au3>
    $timer = TimerInit()
    $Alphabet = StringSplit("ABCDEFGHIJKLMNOPQRSTUVWXYZ", "")
    _ArrayDelete($Alphabet, 0)
    Global $Text
    Global $possib
    Global $name
    $name = 0
    $possib = 0
    $Possibles = FileOpenDialog("select file to save possibles to...", "C:\", "txt (*.txt)")
    $File = FileOpenDialog("select file to decrypt...", "C;\", "txt (*.txt)")
    $Text = FileRead($File)
    $Text = StringRegExpReplace(StringUpper(StringStripCR($Text)), "[^:ABCDEFGHIJKLMNOPQRSTUVWXYZ:]", "")
    Global $VigCypher[26][26]
    For $i = 0 To 25
    Global $icopy = $i
    VigFill($i)
    Next
    $look4word = True
    $word = InputBox("Word to look for?", "If there is a specific word you know is in the text, please give it.")
    If @error = 1 Then
    $look4word = False
    EndIf
    $maxkey = InputBox("Maximum Key length?", "Please specify, what you think is the maximum length of the key." & @CRLF & "Warning, for every single length added it takes almost 30 times as long!")
    EasyWay($maxkey)

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

    Func EasyWay($easyw)
    For $easy = 1 To $easyw
    $allComb = StringSplit(_AllCOmbinations($easy), @CRLF, 1)
    For $c = 26 ^ ($easy - 1) To $allComb[0]
    $time = Round(TimerDiff($timer) / 60000, 2)
    ToolTip("Keyword: " & $allComb[$c] & @CRLF & "Possibles found: " & $possib & @CRLF & "Names found: " & $name & @CRLF & "Minutes ran: " & $time & @CRLF & "Tries: " & $c, 0, 0)
    DecryptCheck($allComb[$c])
    Next
    Next
    EndFunc ;==>EasyWay

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

    Func DecryptCheck($KeyWord)
    $a = 1
    $EncryptText = ""
    While $a < StringLen($Text)
    For $i = 1 To StringLen($KeyWord)
    $KeyPlace = _ArraySearch($Alphabet, StringMid($KeyWord, $i, 1))
    $TextPlace = _ArraySearch($Alphabet, StringMid($Text, $a, 1))
    $EncryptText = $EncryptText & $VigCypher[$KeyPlace][$TextPlace]
    $a += 1
    If $a = StringLen($Text) Then
    ExitLoop
    EndIf
    Next
    WEnd
    $length = StringLen($EncryptText)
    Dim $freq[26]
    For $i = 1 To 26
    $TestText = $EncryptText
    StringRegExpReplace($TestText, $Alphabet[$i - 1], "@")
    $freq[$i - 1] = Round(@extended / $length * 100, 3)
    Next
    If StringInStr($EncryptText, $word) Then
    FileWriteLine($Possibles, "----------------------WORD FOUND!!!!-------------" & @CRLF & "Keyword: " & $KeyWord & @CRLF & $EncryptText)
    $name += 1
    Else
    $Pos = 0
    Select
    Case $freq[-1 + 5] > 5;c
    $Pos += 1
    Case $freq[-1 + 5] > 5;z
    $Pos += 1
    Case $freq[-1 + 6] > 5;b
    $Pos += 1
    Case $freq[-1 + 10] > 5;j
    $Pos += 1
    Case $freq[-1 + 14] > 5;n
    $Pos += 1
    Case $freq[-1 + 17] > 5;q
    $Pos += 1
    Case $freq[-1 + 24] > 5;x
    $Pos += 1
    Case $freq[-1 + 25] > 5;y
    $Pos += 1
    Case $freq[-1 + 24] > 5;p
    $Pos += 1
    Case $freq[-1 + 25] > 5;w
    $Pos += 1
    EndSelect
    If $look4word = True And $Pos < 3 And $freq[-1 + 5] > 10 And $freq[-1 + 14] > 5 And StringInStr($EncryptText, "EN") Then
    FileWriteLine($Possibles, "Keyword: " & $KeyWord & @CRLF & "---" & @CRLF & $EncryptText & @CRLF & "---" & @CRLF)
    $possib += 1
    EndIf
    EndIf
    EndFunc ;==>DecryptCheck

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

    Func VigFill($offset)
    Dim $res[26]
    For $a = 0 To 25
    $VigCypher[$icopy][$a] = $Alphabet[Mod(26 + $a - $offset, 26)]
    Next
    EndFunc ;==>VigFill

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

    Func _AllCOmbinations($MaxLen = 8)
    Global $RetString
    For $i = Asc("A") To Asc("Z")
    $Char = Chr($i)
    $RetString &= $Char & @CRLF
    $RetString &= _AllCOmbinationsRec($Char, $MaxLen - 1)
    Next
    Return StringTrimRight($RetString, 2)
    EndFunc ;==>_AllCOmbinations

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

    Func _AllCOmbinationsRec($string, $MaxLen)
    If $MaxLen = 0 Then Return ""
    Local $RetString, $chars
    For $i = Asc("A") To Asc("Z")
    $chars = $string & Chr($i)
    $RetString &= $chars & @CRLF
    $RetString &= _AllCOmbinationsRec($chars, $MaxLen - 1)
    Next
    Return $RetString
    EndFunc ;==>_AllCOmbinationsRec

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

    MsgBox(0, "FINISHED!", "Finished!")

    [/autoit]

    Credits:

    Spoiler anzeigen
    Zitat

    Laughing Man

    "I thought, what I'd do was, I'd pretend I was one of those deaf-mutes"

  • ctec

    Also da werd nur die Buchstaben "ABCDEFGHIJKLMNOPQRSTUVWXYZ" aus der Originaldatei rauskopiert, aber nichts verschlüsselt.
    Ich gehe somit davon aus, das es nur zeigen soll, wie man die anderen Buchstaben (außer: ABCDEFGHIJKLMNOPQRSTUVWXYZ) weg bekommt.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Hallo Alina,

    ctec verschlüsselt sehr wohl, es sind zwar kleine Fehler bei der Umsetzung, Leerstellen und Sonderzeichen werden bei Vigenère ignoriert (also orginal gelassen), dadurch fehlen nach dem entschlüsseln diese natürlich. Texte sind aber trotzdem lesbar (mit Schönheitsfehlern), wenn er nach der selben Methode entschlüsselt. Brutforce scheint an folgendem Text:

    Zitat

    Klrdumo imm fme kfxwoij Tihz, utsm ajx weh Qbijtr nbe Mbgygèsi zehtboxvg Pxfgeykeh qphzxrnx Uiome fwuxves Aävjzzkybhteetlsls oetcexb orgn. Wo uxr Wouieuahd tmew xbs Flvhmmocieoelmsjplggyg güi Dynhtgy, Ygummjvh, Tseesömbgdl, Intzjiebswa vru Lumsjr zemisjgyxrn.

    zu scheitern, aber dazu demnächst (Zeif?) mehr,

    Edit1: musste meinen Rechner leider einmal herunterfahren, bevor Brutforce fertig war (ich sehs als gescheitert an). Das noch niemand den obigen Text im Original eingestellt hat, wundert mich aber doch.

    mfg (Auto)Bert

    Einmal editiert, zuletzt von AutoBert (9. Mai 2009 um 18:20)

  • !!! Sorry !!!

    Dann bitte ich um "Entschuldigung". Der Fehler muß dann bei mir gelegen haben.

    Bin mal gespannt wer sich da noch ran traut. ;)

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Ich würde mal behaupten dass sich

    Klrdumo imm fme kfxwoij Tihz, utsm ajx weh Qbijtr nbe Mbgygèsi zehtboxvg Pxfgeykeh qphzxrnx Uiome fwuxves Aävjzzkybhteetlsls oetcexb orgn. Wo uxr Wouieuahd tmew xbs Flvhmmocieoelmsjplggyg güi Dynhtgy, Ygummjvh, Tseesömbgdl, Intzjiebswa vru Lumsjr zemisjgyxrn.

    nicht entschlüsseln lässt, scheint beim verschlüsseln was schiefgelaufen zu sein.

  • Ja, da ist noch ein Fehler drinne, aber es wurde ja gesagt, das mans cahut ob man die behoben bekommt bzw. die Frage war ja, ob es jemand allgemein hinbekommt, das Codierungssystem in AutoIt umzusetzen. ;)

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Hallo BitBoy,

    Zitat

    Ich würde mal behaupten dass sich

    Klrdumo imm fme kfxwoij Tihz, utsm ajx weh Qbijtr nbe Mbgygèsi zehtboxvg Pxfgeykeh qphzxrnx Uiome fwuxves Aävjzzkybhteetlsls oetcexb orgn. Wo uxr Wouieuahd tmew xbs Flvhmmocieoelmsjplggyg güi Dynhtgy, Ygummjvh, Tseesömbgdl, Intzjiebswa vru Lumsjr zemisjgyxrn.


    Geh auf den Link http://einklich.net/etc/vigenere.htm kopiere den obigen Text in die Textbox, nimm als Schlüssel meinen Nickname (nicht die Unterschrift, auch Groß- Kleinschreibung beachten) wähle als Modus: Alphabet und du bekommst den Namen eines weiteren Tools (ganz andere Seite, musst du seber danach gogglen), das zwar etwas bockt, aber nach 3-12 Versuchen, die du manuell immer wieder neu anstoßen musst, bekommst du den Text sogar ohne Passwort entschlüsselt,

    mfg (Auto)Bert

  • Hm, ich hab ein anderes Programm verwendet um dahinter zu kommen, dabei kam gar nichts raus.
    Texte die mit dem Programm verschlüsselt wurden knackt es jedoch ohne Probleme. Daher vermute ich einfach mal, dass in den Programmen eine unterschiedliche Variante von Vigenere zum Einsatz kommt um genau zu sein vermute ich die Verabeitung von Leerzeichen dahinter und welches Alphabet verwendet wird.