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
      Verwalter

      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.