Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.145 Beiträge
 
Delphi 12 Athens
 
#6

Re: Caesar-Chiffre

  Alt 16. Jun 2006, 10:11
1: Ord gibt die Position im Zeichensatz.
2: der Buchstabe A hat die Position 65 (siehe Charmap ... einfach mal über Startnenü>ausführen starten, oder unter Zubehör suchen ... "Zeichensatz" oder so)
und zum Rechnen wird, da ja nur das alphabet im gesamten Zeichensatz verschlüsselt wird, alles nach vorn geschoben, also aus A=65 wird 0 usw.
3: was hat wohl 26 Zeichen ... das Vershlüsselte muß ja in diesem Bereich bleiben, also wird alles was außerhalb (größer) ist in diesen Bereich umgebrochen
4: verschigt den verschlüsselten Wert wieder an seine Position im Zeichensatz, also aus 0 wird 65=A
5: macht aus der Position wieder ein Zeichen
6: sowas willst du wissen?
das ist doch nicht wirklich dein Ernst?

2+5: die OH hätte geholfen OH

vielleich läßt es sich so leichter lesen/verstehen.
Delphi-Quellcode:
z := Ord(klar[i]);
z := z - Ord('A');
z := (z + key) mod 26;
z := z + Ord('A');
geheim[i] := chr(z);
wenn man das dann zusammenfaßt, dann kommt sowas raus
geheim[i] := Chr((Ord(klar[i]) - Ord('A') + Key) mod 26 + Ord('A')); Tja und wie du vielleicht vermutest hattest, ist das nur für Großbuchstaben gültig, also das ganze nochmal für die Kleinbucghstaben, außerdem mußt du aufpassen, denn das Leerzeichen, die Satzzeichen, die Zahlen ... alles ist kein Großbuchstabe und würe durch das "mod 26" in den Bereich der Buchstaben verschoben und väre somit futsch.

Delphi-Quellcode:
var klar,geheim:string;
i,key: integer;

begin
  klar := edit1.text;
  geheim := klar;
  key:=strtoint(edit2.text);
  for i:=1 to length(klar) do
    if klar in ['A'..'Z'] then
      geheim[i] := Chr((Ord(klar[i]) - Ord('A') + Key) mod 26 + Ord('A'))
    else if klar in ['a'..'z'] then
      geheim[i] := Chr((Ord(klar[i]) - Ord('a') + Key) mod 26 + Ord('A'));
    panel1.caption:=geheim;
end;

für den gesamten Zeichensazt ginge es dann so (wäre aber nicht zu empfehlen)
geheim[i] := Chr((Ord(klar[i]) + Key) mod 256) das ganze ließe sich dann natürlich auch noch auf andere Zeichen ausweiten.
(PS: auf diese Weise würde aber alles immer nur innerhalb seines Bereichs verschoben)
Delphi-Quellcode:
else if klar in ['0'..'9'] then
  geheim[i] := Chr((Ord(klar[i]) - Ord('0') + Key) mod 26 + Ord('0'));
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat