Caesar Veschlüsselung

Startseite Foren Deutsches LiveCode-Forum Caesar Veschlüsselung

Schlagwörter: 

Ansicht von 12 Antwort-Themen
  • Autor
    Beiträge
    • #25958
      Ledger
      Teilnehmer

        Hallo zusammen,
        ich möchte eine App zur Caesar Verschlüsselung schreiben. Ich weiß nur leider nicht wie ich testen kann, ob es ein Buchstabe ist und wie ich dann die Buchstaben verschiebe.
        Kann mir bitte jemand helfen?
        Danke schonmal 🙂

      • #25960
        Torsten
        Teilnehmer

          Hi Ledger,

          herzlich willkommen im Livecode-Forum 🙂

          Testen, ob ein Zeichen überhaupt ein Buchstabe ist, kann man mit:

          
          put "ABCDEFGHIJKLMNOPQRSTUVWXYZ" into tAlphabet
          if DasZeichen is in tAlphabet then...
          

          Die Position eines Zeichens kann man per offset herausfinden:
          put offset(DasZeichen, tAlphabet) into tZeichenPosition

          Verschieben würde ich dann so machen:

          put "DEFGHIJKLMNOPQRSTUVWXYZABC" into tGeheimesAlphabet
           put char (tZeichenPosition) of tGeheimesAlphabet into ...
          

          Versuch mal den Rest selbst herauszufinden 🙂

          Happy Coding
          Torsten

        • #25962
          Klaus Major
          Administrator

            Ach, das ist die Cäsar Verschlüsselung.

            • #25966
              Torsten
              Teilnehmer

                Ja, ganz einfach, aber zu der damaligen Zeit durchaus nützlich. Man kann die Buchstaben ja auch komplett anders anordnen 🙂

            • #26069
              Ledger
              Teilnehmer

                Danke Torsten für deine Antwort ^^
                Ich hab jetzt das hier schonmal gemacht, aber bisher funktioniert das natürlich nicht..
                on mouseUp
                set the caseSensitive to true
                put “abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ” into Letters
                local rotation, phrase, iLetter, rotphrase
                put the thumbPosition of scrollbar “Scrollbar” into rotation
                — Eingabetext in phrase abspeichern
                put field “Eingabefeld” into phrase

                repeat for each char iLetter in phrase

                — Ist es ein Buchstabe? (nur wenn es wirklich ein Buchstabe ist, wird er ver-/entschlüsselt also müssen wir nach > 0 abfragen)
                if iLetter is in Letters then put rotation > 0
                — finde die Position des Buchstabens im Alphabet (a ist der 1. Buchstabe, A ist der 53. Buchstabe,…)
                find iLetter in Letters
                — bei Leerzeichen oder Sonderzeichen liefert die Funktion offset die Zahl 0 zurück
                put offset(iletter,Letters) into letterPos

                — müssen wir verschlüsseln?
                —–Dann muss zu der Position der aktuelle key dazugezählt werden und der Buchstabe an dieser neuen Position genommen werden
                if rotation > 0 then add rotation to letterPos
                — oder entschlüsseln?
                —–Dann müssen wir im hinteren Teil des Alphabets anfangen
                if rotation < 0 then subtract rotation from letterPos
                –…. ansonsten (es ist kein Buchstabe sondern ein Leerzeichen oder Sonderzeichen)
                if iLetter is not in Letters then put rotation = 0
                —- dann lassen wir das Zeichen wie es ist.

                — der entschlüsselte Buchstabe wird an rotphrase angehängt
                end repeat

                — Der neue Text muss noch ausgegeben werden.
                put iLetter into rotphrase
                end mouseUp

                könntet ihr mir weiterhelfen?

              • #26081
                Torsten
                Teilnehmer

                  Hi Ledger,

                  wichtigster Punkt: Code immer mit dem Button “Code” markieren (zweiter Button von rechts im Editor)

                  Du hast einige Dinge richtig gemacht, andere etwas umständlich und eines hast Du vergessen: das Ausgabefeld 🙂

                  Hier mal mein Codevorschlag:

                  on mouseUp
                     set the caseSensitive to true
                     put "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" into Letters
                     local rotation, phrase, iLetter, rotphrase
                     put the thumbPosition of scrollbar "Scrollbar" into rotation
                     put field "Eingabefeld" into phrase
                     
                     repeat for each char iLetter in phrase
                        put offset(iletter,Letters) into letterPos
                        if letterpos > 0 then 
                           put char (letterPos + rotation) of Letters after rotphrase
                        else
                           put iLetter after rotphrase
                        end if
                     end repeat
                     
                     put rotphrase into field "Ausgabefeld"
                     
                  end mouseUp

                  Happy Coding!
                  Torsten

                • #26083
                  Torsten
                  Teilnehmer

                    Noch ein kleines Gimmick: nenne den Verschlüsselungs-Button “Encode” und füge diesen Code in den Scrollbar ein:

                    on scrollbarDrag 
                       send "mouseup" to button "Encode"
                    end scrollbarDrag

                    Wenn Du jetzt scrollst, wird sofort verschlüsselt, das hat dann sowas Matrix-Artiges 🙂

                    Happy Coding!
                    Torsten

                  • #26085
                    Torsten
                    Teilnehmer

                      Preisfrage: Mit welchem Code habe ich den Text verschlüsselt?

                      
                      ts rtzxjZu
                         xjy ymj hfxjXjsxnynaj yt ywzj
                         uzy "fghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdeFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDE" nsyt Qjyyjwx
                         qthfq wtyfynts, umwfxj, nQjyyjw, wtyumwfxj
                         uzy ymj ymzrgUtxnynts tk xhwtqqgfw "Xhwtqqgfw" nsyt wtyfynts
                         uzy knjqi "Jnslfgjkjqi" nsyt umwfxj
                         
                         wjujfy ktw jfhm hmfw nQjyyjw ns umwfxj
                            uzy tkkxjy(nqjyyjw,Qjyyjwx) nsyt qjyyjwUtx
                            nk qjyyjwutx > 0 ymjs 
                               uzy hmfw (qjyyjwUtx + wtyfynts) tk Qjyyjwx fkyjw wtyumwfxj
                            jqxj
                               uzy nQjyyjw fkyjw wtyumwfxj
                            jsi nk
                         jsi wjujfy
                         
                         uzy wtyumwfxj nsyt knjqi "Fzxlfgjkjqi"
                         
                      jsi rtzxjZu
                      

                      Have fun!
                      Torsten

                    • #26095
                      Ledger
                      Teilnehmer

                        Hallo Torsten,
                        ich würde sagen du hast das um 21 Felder verschoben 😉
                        Funktioniert alles super!
                        Ich würde jetzt noch gerne einen Raten-Button einbauen, also dass ich auf Knopfdruck einen unbekannten Schlüssel erraten und knacken kann, hab nur noch keinen Ansatz ^^
                        Hättet ihr Ideen wie das geht?

                        Beste Grüße

                      • #26100
                        Torsten
                        Teilnehmer

                          Button, der einen zufälligen Wert für rotation eingibt?

                        • #26102
                          Ledger
                          Teilnehmer

                            Nein am coolsten wäre es natürlich wenn ich auf Knopfdruck gleich die fertige Übersetzung rausbekomme und er mir dann noch sagt mit wie viel er es verschiebt. Aber das übersteigt meine Programmier-Kenntnisse. ^^

                            • #26121
                              Torsten
                              Teilnehmer

                                Das heisst, das Programm müste Durch ausprobieren, die richtige Verschlüsselung erkennen?

                                Ich würde so vorgehen, wie es die Leute mit der automatischen Spracherkennung machen (d.h. in welcher Sprache ist ein Text verfasst?): die haben für jede Sprache eine Liste mit sogenannten Stopwörtern. Das sind die Wörter, die nicht für eine Suche indiziert werden, weil sie zu häufig vorkommen und nach denen nicht gesucht wird, z.B. der, die das, in, am, um, etc.

                                Wenn Du weisst, dass der Text in Deutsch ist, kannst Du das folgendermassen machen:

                                1. Lade Dir eine Liste mit deutschen Stopwörtern in ein Field, findest Du leicht im Netz, wenn du “deutsche stopwörter” suchst.

                                2. Für jede Entschlüsselung (1-26) fragst Du für jedes Stopwort ab, wie oft es in dem Text vorkommt. Am Ende hat jede Entschlüsselung eine Zahl, die Entschlüsseluzng mit der höchsten Zahl ist wahrscheinlich richtig.

                                Wichtige Befehle:

                                * repeat with
                                * repeat for each trueword 

                                Probier’s mal aus, wie weit du kommst und poste den Code. Ich hab schon was geabut, funktioniert perfekt, ausser bei einzelnen Wörtern, die nicht in der Stopwortliste stehen – logischerweise.

                                Happy Coding
                                Torsten

                            • #26106
                              Ledger
                              Teilnehmer

                                Ich hab auch leider noch das Problem, das wenn ich einen Satz mit 19 verschlüssle, diesen dann in das Eingabefeld schreibe und dann mit 19 entschlüssle, dass dann nicht mehr alles richtig entschüsselt wird… kannst du mir da noch helfen? ^^
                                LG

                                • #26117
                                  Torsten
                                  Teilnehmer

                                    Wenn Du mit 19 kodierst, musst Du mit 7 encodieren 🙂

                                • #26168
                                  Ledger
                                  Teilnehmer

                                    Also ich hab jetzt viel rumprobiert, aber nichts hat irgendwie ansatzweise funktioniert…ich weiß nicht wie du das so schnell schaffst ^^

                                  • #26172
                                    Torsten
                                    Teilnehmer

                                      Alles Übung, bin schliesslich schon seit Jahrzehnten am Programmieren 🙂

                                      Vorraussetzung:

                                      1. ein Field “Stopwords” in dem deutsche Stopwörter stehen
                                      2. im Field “Eingabefeld” steht ein Text, den Du vorher verschlüsselt hast.

                                      Ok, hier ist das Skript, den ich im Button “Auto-Encrypt” plaziert habe:

                                      on mouseup
                                         
                                         put field "Eingabefeld" into tEingabe
                                         put field "Stopwords" into tStopwords
                                         put "0" into tMostHits
                                         
                                         repeat with i = 1 to 26
                                            
                                            set the thumbposition of scrollbar "Scrollbar" to i
                                            send "mouseup" to button "Encode"
                                            put empty into tHits
                                            
                                            repeat for each trueword tStopword in tStopwords
                                               repeat for each trueword tWord in field "Ausgabefeld"
                                                  if tStopword = tWord then
                                                     add 1 to tHits
                                                  end if
                                               end repeat
                                            end repeat
                                            
                                            put i & tab & tHits & cr after tHitliste
                                            if tHits > tMostHits then 
                                               put tHits into tMostHits
                                               put i into tCode
                                            end if
                                            
                                         end repeat
                                         answer "Der Entschüsselungscode ist wahrscheinlich:" && tCode & cr & cr &  tHitliste
                                         
                                         set the thumbposition of scrollbar "Scrollbar" to tCode
                                         send "mouseup" to button "Encode"
                                         
                                      end mouseup

                                      Viel Spass beim Entschlüsseln des Skripts und der Texte 🙂

                                      Happy Coding
                                      Torsten

                                  Ansicht von 12 Antwort-Themen
                                  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.