Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Caesar Verschlüsselung Probleme (https://www.delphipraxis.net/57922-caesar-verschluesselung-probleme.html)

issejal 28. Nov 2005 18:58


Caesar Verschlüsselung Probleme
 
hallo,
ich versuche gerade einen Text per Caesar-Verschlüsselung wie folgt zu verschlüsseln:

function decodeBuchstabe(c: Char): Char;
begin

case c of
'a' : Result := 'd';
'b' : Result := 'e';
'c' : Result := 'f';
...usw.

doch ich möchte noch einen beliebigen Schlüssel hinzufügen, so dass aus a auch e wird, wenn ich den schlüssel 4 eingebe.
ich weiß aber nicht, wie ich anfangen soll, darum bitte ich um hilfe.

Nikolas 28. Nov 2005 19:02

Re: Caesar Verschlüsselung Probleme
 
Herzlich willkommen in der DP. :dp:

Schau dir mal die Funktionen Ord und Chr an. Damit kannst du die Verschlüsselung in ein paar Zeilen machen.Vielleicht wird dir noch Lowcase weiterhelfen; damit kannst du große Buchstaben verkleinern.

issejal 28. Nov 2005 19:13

Re: Caesar Verschlüsselung Probleme
 
hallo, vielen dank für die schnelle antwort
mit chr und ord habe ich noch nicht gearbeitet, weil
wenn ich den schlüssel 5 eingebe und beim X bin, kommen beim ASCII nur Zeichen.

das problem ist, dass man bei den letzten buchstaben (z.b. x,y,z) den schlüssel
ja nicht mehr addieren muss, sondern subtrahieren und das bereitet mir auch probleme.

gibt es irgendwo ein FAQ zu chr und ord?

Nikolas 28. Nov 2005 19:19

Re: Caesar Verschlüsselung Probleme
 
Das FAQ zu ord und chr nennt sich F1 :mrgreen:
Einfach in Delphi den Befehl markieren und F1 drücken. Dann wird der Befehl erklärt.

Zitat:

das problem ist, dass man bei den letzten buchstaben (z.b. x,y,z) den schlüssel
ja nicht mehr addieren muss, sondern subtrahieren und das bereitet mir auch probleme.
Das ist falsch, so funktioniert Caesar nicht. Wenn es so wäre, wäre die Chiffre nicht eindeutig dechiffrierbar. Wenn die jemand eine 24 schickt, wüsstest du dann nicht, ob dein Freund den 22. oder den 26. Buchstaben mit b verschlüsselt hat.
Wenn du ein x mit einem c verschlüsseln willst, denkst du dir ein erweitertes Alphabet (...xyzabc...) und landest bei a.
Im Programm könntest du das etwa so machen: besorg dir die Nummer des zu verschlüsselten Buchstaben (x->24 usw) und die des Schlüsselbuchstaben (c->3). Dann addier beide und zieh 26, ab wenn du über 26 kommst. Dann landest du hier bei 24+3=27, 27-26=1 <-> a. Jetzt musst du nur noch aus der 1 ein a machen und da hilft dir chr weiter.

issejal 28. Nov 2005 19:35

Re: Caesar Verschlüsselung Probleme
 
ok gut, die rechnung verstehe ich, aber ich bin in delphi nicht der hellste,
ich weiß ehrlich nicht wie ich das in delphi soll.

mit ord() wandle ich den Buchstaben in eine zahl um und mit chr() wieder zurück.

kannst du mir bitte einen kleinen ansatz geben, wo ich drauf aufbauen kann?

simonko 28. Nov 2005 19:44

Re: Caesar Verschlüsselung Probleme
 
denk dir mal den algoritmus aus ohne an einer bestimmten sprache zu denken.

ich würd einfach zeichen in ascii umwandeln +n addieren und wieder in buchstaben umwandeln.
falls der buchstabe > 'z' einfach -('z'-'a') wegzählen. so in der art

Nikolas 28. Nov 2005 19:47

Re: Caesar Verschlüsselung Probleme
 
So als Ansatz:
Delphi-Quellcode:
var
chr: char;
x: integer;
begin
chr:='d'; // Mal als Bsp.
x:= ord(str); // Da steht jetzt was Richtung 80 drin, wenn ich mich recht erinner...
x:= x-ord('a')+1; // Jetzt hat man da schön seine 4 drin stehen.
Jetzt kannst du verschlüsseln wie du willst und nachher alle Schritte rückwärts gehen.

issejal 28. Nov 2005 19:55

Re: Caesar Verschlüsselung Probleme
 
hab nen quellcode gefunden für den festen schlüssel 3:

for i:=0 to richedit1.lines.count-1 do
begin
for j:=1 to length(richedit1.lines[i]) do
if ((ord((richedit1.lines[i])[j])>64) and (ord((richedit1.lines[i])[j])<88))
then s:=s+chr(ord((richedit1.Lines[i])[j])+3)
else if ((ord((richedit1.lines[i])[j])>87) and (ord((richedit1.lines[i])[j])<91)) then s:=s+chr(ord((richedit1.Lines[i])[j])-23)
else s:=s+(richedit1.lines[i])[j];
richedit2.Lines[i]:=s;
s:='';
end;

ich glaub ich hab zu wenig mit delphi programmiert, denn schon bei dem code sehe ich nicht mehr durch.
warum schreibe ich bei ord: "ord((richedit1.lines[i])[j])"?

danke für die all die hilfe, aber ich glaub, dass ich das nie hinkriegen werde :(

issejal 28. Nov 2005 19:57

Re: Caesar Verschlüsselung Probleme
 
danke toxman für den ansatz, vielleicht schaffe ich es doch noch. sieht aber eher schlecht aus...

Nikolas 28. Nov 2005 19:57

Re: Caesar Verschlüsselung Probleme
 
Setz bitte erstmal [delphi ]-Tags um den Code, damit er mit Syntaxhighlighting dargestellt wird. So kann man den kaum lesen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:15 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz