Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Skytale
Mathematiker - Mi 28.11.12 09:19
Titel: Skytale
Hallo,
nach der Narses' Veröffentlichung der Adents-Spiel-Ankündigung musste ich natürlich versuchen, den Text zu knacken.
Dass es vielleicht die Skytale-Verschlüsselung ist, ergab sich aus dem Adventsspiel 2011, an dem ich ja noch nicht mitgemacht habe. Erst am 24.Dezember habe ich den 1.Jahrestag der aktiven Teilnahme in der EE. Dann darf ich aus der Krabbelgruppe raus. :lol:
Also musste eine Entschlüsselungs-Routine her. Mein Problem war, dass ich stundenlang über die Nichtbuchstaben und Nichtziffern stolperte. Sie wollten einfach nicht in die Verschlüsselung hineinpassen. Außerdem hatte ich einen Denkfehler bei der Zerlegung des Geheimtextes in einzelne Strings.
Im Endergebnis filtere ich nun alle Buchstaben und Ziffern aus, wende auf diese Skytale an und transformiere zurück.
Gibt man "Skytale" in der Suche ein, kommt außer dem Adventsspiel 2011 nichts. Daraus schlussfolgere ich, dass jeder seine eigene, "geheime" Variante nutzt.
Mich würde nun interessieren, ob es ein wesentlich anderes und effizienteres Verfahren, als meins, gibt.
Sollte ich mit dieser Veröffentlichung gegen das ungeschriebene Gesetz, nichts über Skytale zu veröffentlichen, dann einfach löschen.
Im Anhang befindet sich meine Lösung. Diese Lösung ver- und entschlüsselt, auch mit einem anderen Skytaledurchmesser größer 3. Bei meiner Lösung müssen Geheim- und Klartest mit Kopieren/Einfügen in die Textfelder kopiert werden.
Beste Grüße
Mathematiker
Tilman - Do 29.11.12 00:45
Mathematiker hat folgendes geschrieben : |
Gibt man "Skytale" in der Suche ein, kommt außer dem Adventsspiel 2011 nichts. |
Psst:
http://de.wikipedia.org/wiki/Skytale ;)
Ich hatte die Ankündigung zu spät gelesen, und wurde ausserdem durch den Titel verwirrt. (Römische Zahl, haha mal was neues^^). Aber dass der erste Absatz wohl identisch zu 2011 ist, das war mir klar, hab es trotzdem nicht mehr geschafft es zu knacken :(
Mathematiker - Do 29.11.12 00:52
Hallo Tilman,
natürlich hast Du Recht. Im ganzen Netz findet man zu diesem Thema massenhaft.
Ich habe mich wahrscheinlich nicht richtig ausgedrückt. Mit der "Suche" meinte ich auch die der Entwickler-Ecke. Und da war ich schon überrascht, dass niemand bisher etwas veröffentlicht hatte.
Beste Grüße
Mathematiker
Tilman - Do 29.11.12 01:13
Du hättest den 2011er Thread mal genau lesen sollen ^^ wie im 2012er richtigerweise gesagt wurde, kannst du dazu sogar dein Programm verwenden, musst nur eben auf Kodieren, statt Dekodieren klicken :)
http://www.entwickler-ecke.de/viewtopic.php?p=654641#654641
P.S. zur Effizienz kann ich nix sagen, die war mir egal, aber wenn du an anderen Lösungen interessiert bist, hier meine von 2011
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45:
| const zeichen = 'abcdefghijklmnopqrstuvwxyz'+ 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'+ '0123456789öäüÖÄÜß';
procedure TForm1.Button1Click(Sender: TObject); var kt1,kt2,kt3,gesamt: String; n,p,q: Integer; modulo: Integer; begin memo2.Text := ''; kt1 := ''; kt2 := ''; kt3 := '';
p := 0; for n := 1 to length(memo1.text) do begin if pos(memo1.Text[n],zeichen) > 0 then begin inc(p); modulo := (p mod 3); case modulo of 0: kt3 := kt3 + memo1.Text[n]; 1: kt1 := kt1 + memo1.Text[n]; 2: kt2 := kt2 + memo1.Text[n]; end; end; end; gesamt := kt1+kt2+kt3; q := 0; for n := 1 to length(memo1.text) do begin if pos(memo1.Text[n],zeichen) = 0 then begin memo2.text := memo2.text + memo1.Text[n]; end else begin inc(q); memo2.Text := memo2.Text + gesamt[q]; end; end; end; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!