Ich habe es bestimmt auch in der Delphi-Praxis schon gepostet, aber ich poste es immer wieder gerne, also auch hier noch einmal:
Zitat:
Von Cäsar-Verschlüsselungen in denen irgendwo minus Fünfundsechzig gerechnet wird halte ich nicht viel!
Stellt sich zunächst die Frage, wo die 65 herkommt: Das ist (sehr frei und auch nicht ganz korrekt) nach Ollis Tutorial eine verkappte Repräsentation des Datums 'A' (ein großes A). Die schleicht sich ein, weil irgendwo im Code mit den
ASCII-Codes der Buchstaben irgendwelche numerischen Berechnungen modulo 65 durchgeführt werden.
Der
imho einzige wirkliche Vorteil dieses Vorgehens ist eine schnelle Ausführungsgeschwindigkeit, aber die spielt bei dem Problem ohnehin im Normalfall eine sehr untergeordnete Rolle. Bleibt im Endeffekt kein wirklicher Vorteil.
Eine alternative Möglichkeit, die Cäsar-Verschlüsselung zu implemetieren, ist es, das Alphabet einmal aufzuschreiben, und darunter nocheinmal das Alphabet aber etwas "verschoben" (d.h. das A steht unter dem D, das B unter dem E usw...). Damit hat man im Grunde eine kleine Datenbank in dem der erste Eintrag der Schlüssel ist, welcher Buchstabe verschlüsselt werden soll und der zweite Eintrag der Wert, auf den der jeweilige Buchstabe abgebildet wird.
Damit umgeht man die folgenden Probleme: Bei der
ASCII-Werte-Addition wird angenommen, dass die Buchstaben alle "hintereinander liegen". Das mag zwar bei
ASCII-Codierung so sein, aber ist doch eine willkürliche Annahme, die schon dann versagt, wenn auch Kleinbuchstaben verschlüsselt werden sollen. Oder Satzzeichen, Sonderzeichen, andersssprachige Alphabete...
zweites Problem ist, dass davon ausgegangen wird, dass alle Buchstaben "gleich weit" verschoben werden. Wenn man allerdings möchte, dass das A auf das Z abgebildet wird, B auf Y, C auf X usw... bekommt man schon arge Probleme. Das ist dann zwar keine Cäsar-Verschlüsselung mehr, aber ein eng verwandtes Problem, dass sich mit der zweiten Implementierung ungleich einfacher lösen lässt als mit der ersten. Das gilt analog für alle Substiutions-Verschlüsselungen.
Zusammenfassung: leg dir eine Liste (damit könnte ein String oder ein Array oder sonstwas gemeint sein) mit allen Buchstaben/Werten an, die verschlüsselt werden sollen an; und eine weitere Liste, in der an der gleichen Position jeweils der Wert steht, auf den abgebildet wird.
Das ist genauso einfach zu implementieren wie das
ASCII-Gerechne, genauso einfach zu verstehen, ein kleines bisschen langsamer, aber dafür ungleich flexibler!