aboutsummaryrefslogtreecommitdiff
path: root/Info/11/NTG/2/Caesar-Implementierung/SymCrypt.json
blob: 5945fe5df4be97dbd32eaf2eec7085ff5f73b63d (plain)
1
{"name":"SymCrypt","modules":[{"name":"CaesarLeicht","text":"/**\n * Implementierung des Caesar-Verfahrens\n * \n * Die Klasse bietet statische Methoden zum ver- und entschluesseln\n * von Text mithilfe des Caesar-Verfahrens an.\n */\nclass CaesarLeicht {\n   /**\n    * Allgemeine Methode die eine Eingabe im Alphabet verschiebt\n    * \n    * Das Alphabet besteht dabei nur aus Kleinbuchstaben ([a-z]).\n    * Die Verschiebung muss dabei nur nach rechts.\n    * \n    * @param eingabe Der Eingabetext\n    * @param verschiebung Die Verschiebung im Alphabet\n    * @return Der Text indem jedes Zeichen um verschiebung verschoben wurde\n    */\n   static String caesar(String eingabe, int verschiebung) {\n      String output = \"\";\n      // TODO: Implementiere die Methode anhand ihrer Beschreibung\n      // Tipps gibts unter:\n      // https://schule.muhq.space/panther/leicht.html\n      \n      return output;\n   }\n\n   /**\n    * Verschluesselt einen Text mit dem Caesar-Verfahren\n    * \n    * @param klartext Der zuverschluesselnde Klartext\n    * @param schluessel Der zuverwendende geheime Schluessel\n    * @return Der verschluesselte Geheimtext\n    */\n   static String verschluesseln(String klartext, int schluessel) {\n      return caesar(klartext, schluessel);\n   }\n\n   /**\n    * Entschluesselt einen Gehimtext mit dem Caesar-Verfahren\n    * \n    * @param geheimtext Der zuentschluesselnde Geheimtext\n    * @param schluessel Der zuverwendende geheime Schluessel\n    * @return Der entschluesselte Klartext\n    */\n   static String entschluesseln(String geheimtext, int schluessel) {\n      return caesar(geheimtext, 26 - schluessel);\n   }\n}","identical_to_repository_version":true,"is_copy_of_id":1618303,"repository_file_version":3},{"name":"Story","text":"class Story {\n   static long djb2Hash(String s) {\n      long hash = 5381;\n      for (int i = 0; i < s.length(); i++) {\n         hash = ((hash << 5) + hash) + (int)s.charAt(i); \n      }\n      return hash;\n   }\n\n   static void run() {\n      Story.intro();\n      if(Story.aufgabenAuswahl().equalsIgnoreCase(\"schwer\")) {\n         Story.aufgabeSchwer();\n      } else {\n         Story.aufgabeLeicht();\n      }\n      Story.ende();\n   }\n\n   static void intro() {\n      Panther.sagt(\"\"\"\n\nDu musst mir helfen!\nJemand hat mich gestohlen.\nUm sicher zu sein, dass du mir\nhelfen kannst, beantworte\nfolgende Frage:\nzhofkh idueh kdeh lfk?\n\"\"\");\n\n      if(djb2Hash(Input.readString(\"Antwort:\").toLowerCase()) != 2090616631) { System.exit(1); }\n\n   }\n   \n   static String aufgabenAuswahl() {\n      Panther.sagt(\"\"\"\nVoellig korrekt!\nIch sehe schon du bist\ngeeignet. Der Dieb hat\nverschluesselte Nachrichten\nhinterlassen. Ich vermute er\nverwendet das Caesar-Verfahren.\nDu musst das Caesar-Verfahren\nimplementieren, um die\nNachrichten zu entschluesseln.\n\"\"\");\n\n      return Input.readString(\"Willst du es leicht oder schwer?: \");\n   }\n   \n   static void uhr() {\n      println(\"\"\"\n\n\nDie Uhr am Tatort:\n        _____\n     _.'_____`._\n   .'.-'  12 `-.`.\n  /,' 11      1 `.\\\\\\\n // 10      /   2 \\\\\\\\\\\\\n;;         /       ::\n|| 9  ----O      3 ||\n::                 ;;\n \\\\\\\\\\\\ 8           4 //\n  \\\\\\`. 7       5 ,'/\n   '.`-.__6__.-'.'\n    ((-._____.-))\n    _))       ((_\n   '--'       '--'\n\"\"\");\n   }\n\n   static void aufgabeLeicht() {\n      Panther.sagt(\"\"\"\n\nDu hast dich fuer 'leicht' entschieden.\nGut ich weiss naemlich, dass\nder Dieb nur die 26 Kleinbuchstaben\nunseres Alphabets verwendet.\n\nErgaenze die Methode caesar in der\nKlasse Caesar, so dass sie mit allen 26\nKleinbuchstaben funktioniert.\n\n\n\"\"\");\n\n      println(\"\"\"\n\nWeitere Tipps findest du unter:\nhttps://schule.muhq.space/panther/leicht.html\n\"\"\");\n\n      if(djb2Hash(CaesarLeicht.entschluesseln(\"ghu jroghqh uhlwhu\", 3)) != 3019481481) {\n         println(\"Deine caesar Implementierung ist leider noch nicht korrekt.\");\n         println(\"Der Ort des rosaroten Panther ist immer noch unbekannt.\");\n         System.exit(1);\n      }\n\n      println();\n      Panther.sagt(\"\"\"\nSehr gut! Den ersten Hinweis\n'der goldene reiter' konnten\nwir entschluesseln.\n\nDer Dieb hat am Tatort an\nder Uhr gedreht!\nEntschluessle den zweiten Hinweis:\n\n'nbocnox qbklox'\n\"\"\");\n\n      uhr();\n   \n      if(djb2Hash(Input.readString(\"Hinweis:\")) != -2553580551) {\n         println(\"Der Hinweis ist nicht korrekt.\");\n         println(\"Hast du den passend Schluessel verwendet?\");\n         System.exit(1);\n      }\n   }\n\n   static void aufgabeSchwer() {\n      Panther.sagt(\"\"\"\nDu hast dich fuer 'schwer' entschieden.\nDas ist auch noetig, denn\nder Dieb verwendet alle schreibbaren\nBuchstaben der ASCII-Tabelle [1].\n\nErgaenze die Methode caesar in der\nKlasse CaesarSchwer, so dass sie mit\nallen schreibbaren ASCII Zeichen und\nin beide Richtungen funktioniert.\n\n[1]: https://bycs.link/Roqmvh\n\"\"\");\n\n      println(\"\"\"\n\nWeitere Tipps findest du unter:\nhttps://schule.muhq.space/panther/schwer.html\n\nDer Dieb hat wohl seinen Passwort-\nZettel am Tatort verloren.\n   ______________________________\n / \\\\\\                             \\\\\\.\n|   |                            |.\n \\\\\\_ |  Passwort:                 |.\n    |  M[]nA.-5]a+               |.\n    |                            |.\n    | Hinweis:                   |.\n    | Antwort auf die endgültige |.\n    | Frage nach dem Leben,      |.\n    | dem Universum und          |.\n    | dem ganzen Rest            |.\n    |                            |.\n    |   _________________________|___\n    |  /                            /.\n    \\\\\\_/____________________________/.\n\"\"\");\n\n      if(djb2Hash(CaesarSchwer.entschluesseln(\"M[]nA.-5]a+\",\n         Input.readInt(\"Antwort auf die endgültige Frage nach dem Leben, dem Universum und dem ganzen Rest:\"))) != -42961670) {\n         println(\"Deine caesar Implementierung ist leider noch nicht korrekt\");\n         println(\"oder der Schluessel ist noch falsch.\");\n         println(\"Das Passwort des Diebes ist weiterhin geheim.\");\n         System.exit(1);\n      }\n   \n      println();\n      Panther.sagt(\"\"\"\nSehr gut wir haben das Passwort:\n#13Dubai37_\n\nDamit habe ich die Beschreibung\ndes Verstecks gefunden:\n\nWx' W|t\"t#) ()xv~) |# x|#x\"\nfv{!|x((ytv{ t\" Zt'x w* a$'wA\nWx# fv{!*x((x! {tux |v{ \"|) wx\"\nY!*z XmlEGFI +$# VWZ #tv{ _ga zx(v{|v~)A\n\n\nAusserdem ist mir aufgefallen,\ndass der Dieb am Tatort\nan der Uhr gedreht hat.\n\"\"\");\n\n      uhr();\n\n      String antwort = Input.readString(\"Wohin muessen wir Interpol schicken?\");\n      if(djb2Hash(antwort.toLowerCase()) != 199414383) {\n         println(\"Interpol findet leider nichts in \" + antwort);\n         System.exit(1);\n      }\n   }\n   \n   static void ende() {\n      String feuerwerk = \"\"\"\n                                   .''.\n       .''.      .        *''*    :_\\\\\\/_:     .\n      :_\\\\\\/_:   _\\\\\\(/_  .:.*_\\\\\\/_*   : /\\\\\\ :  .'.:.'.\n  .''.: /\\\\\\ :   ./)\\\\\\   ':'* /\\\\\\ * :  '..'.  -=:o:=-\n :_\\\\\\/_:'.:::.    ' *''*    * '.\\\\\\'/.' _\\\\\\(/_'.':'.'\n : /\\\\\\ : :::::     *_\\\\\\/_*     -= o =-  /)\\\\\\    '  *\n  '..'  ':::'     * /\\\\\\ *     .'/.\\\\\\'.   '\n      *            *..*         :\n        *\n        *\n   \"\"\";\n      println(\"\");\n      println(\"Geschafft!\");\n      println(\"Die Polizei hat dank deiner Hilfe\");\n      println(\"den rosaroten Panther gefunden!\");\n      println(\"Ganz Frankreich dankt Dir.\");\n      println(feuerwerk);\n   \n   }\n}\n\n   \nclass Panther {\n   static final String[] gesicht = \"\"\"\n  .--.            .--.  \n ( (`\\\\\\\\\\\\.\"--``--\".//`) ) \n  '-.   __   __    .-'  \n   /   /__\\\\\\ /__\\\\\\   \\\\\\    \n  |    \\\\\\ 0/ \\\\\\ 0/    |   \n  \\\\\\     `/   \\\\\\`     /   \n   `-.  /-\\\"\\\"\\\"-\\\\\\  .-`     \n     /  '.___.'  \\\\\\      \n     \\\\\\     I     /      \n      `;--'`'--;`       \n        '.___.'         \n\"\"\".split(\"\\\\r?\\\\n\");\n   \n   static void sagt(String nachricht) {\n      String[] zeilen = nachricht.split(\"\\\\r?\\\\n\");\n      for (int i = 0; i < Math.max(gesicht.length, zeilen.length); i++) {\n         String zeile = \"\";\n         if(i < gesicht.length) {\n            zeile = gesicht[i];\n         } else {\n            zeile = \"\";\n         }\n   \n         if(i < zeilen.length) {\n            zeile += zeilen[i]; \n         }\n         println(zeile);\n      }\n   }\n}\n\nStory.run();","identical_to_repository_version":false,"is_copy_of_id":1618304,"repository_file_version":1},{"name":"CaesarSchwer","text":"/**\n * Implementierung des Caesar-Verfahrens\n * \n * Die Klasse bietet statische Methoden zum ver- und entschluesseln\n * von Text mithilfe des Caesar-Verfahrens an.\n */\nclass CaesarSchwer {\n   /**\n    * Das gesamte schreibbare Alphabet der ASCII Tabelle\n    */\n   static final String ALPHABET = \"/*FIXME*/\";\n\n   /**\n    * Allgemeine Methode die eine Eingabe in einem Alphabet verschiebt\n    * \n    * Das Alphabet sind alle schreibbaren ASCII-Zeichen.\n    * Die Verschiebung soll swohol nach rechts (positiv),\n    * als auch nach links (negativ) funktionieren.\n    * \n    * @param eingabe Der Eingabetext\n    * @param verschiebung Die Verschiebung im Alphabet\n    * @return Der Text indem jedes Zeichen um verschiebung verschoben wurde\n    */\n   static String caesar(String eingabe, int verschiebung) {\n      String ausgabe = \"\";\n      // TODO: Implementiere die Methode gemaess ihrer Beschreibung\n      // Tipps gibts unter:\n      // https://schule.muhq.space/panther/schwer.html\n      return ausgabe;\n   }\n\n   /**\n    * Verschluesselt einen Text mit dem Caesar-Verfahren\n    * \n    * @param klartext Der zuverschluesselnde Klartext\n    * @param schluessel Der zuverwendende geheime Schluessel\n    * @return Der verschluesselte Geheimtext\n    */\n   static String verschluesseln(String klartext, int schluessel) {\n      return caesar(klartext, schluessel);\n   }\n\n   /**\n    * Entschluesselt einen Gehimtext mit dem Caesar-Verfahren\n    * \n    * @param geheimtext Der zuentschluesselnde Geheimtext\n    * @param schluessel Der zuverwendende geheime Schluessel\n    * @return Der entschluesselte Klartext\n    */\n   static String entschluesseln(String geheimtext, int schluessel) {\n      return caesar(geheimtext, 0 /* FIXME */);\n   }\n}","identical_to_repository_version":true,"is_copy_of_id":1618340,"repository_file_version":3}],"settings":{"libraries":[]}}