Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Verschlüsselung mit dem Caesar Verfahren (https://www.delphipraxis.net/49380-verschluesselung-mit-dem-caesar-verfahren.html)

UdoVogel 10. Jul 2005 16:23


Verschlüsselung mit dem Caesar Verfahren
 
Hallo zusammen.
Ich würde gerne ein Delphi Programm erstellen, bei dem der Benutzer einen mehrzeiligen Text eingeben kann.
Dieser soll im Caesar Verfahren verschlüsselt und dem Benutzer ausgegeben werden.
Dabei soll aber Groß- und Kleinschreibung, sowie Satzzeichen berücksichtigt werden.
Mein Ansatz (bei dem nur Groß- und Kleinschreibung berücksichtigt ist):

Delphi-Quellcode:
procedure TForm1.BEntschluesselnClick(Sender: TObject);
var parameter, x, s, y: integer;
    alphabet, a: string;
    b: char;
 begin
  MAusgabe.Text:='';
  alphabet:=MEingabe.Text;
  parameter:=Para.Value;
   for y:=1 to length(alphabet) do
    begin
     s:=ord(alphabet[y]);
     x:=s+parameter;
      if s<96 then
       if x>90 then b:=chr(x-26)
       else b:=chr(x);
      if s>96 then
       if x>122 then b:=chr(x-26)
       else b:=chr(x);
      a:=a+b
    end;
     MAusgabe.Lines.Add(a);
 end;

procedure TForm1.BVerschluesselnClick(Sender: TObject);
var parameter, x, s, y: integer;
    alphabet, a: string;
    b: char;
 begin
  MAusgabe.Text:='';
  alphabet:=MEingabe.Text;
  parameter:=Para.Value;
   for y:=1 to length(alphabet) do
    begin
     s:=ord(alphabet[y]);
     x:=s-parameter;
      if s<96 then
       if x<65 then b:=chr(x+26)
       else b:=chr(x);
      if s>96 then
       if x<97 then b:=chr(x+26)
       else b:=chr(x);
      a:=a+b;
    end;
     MAusgabe.Lines.Add(a);
 end;
Der Text wird aber immer in einer Zeile verschlüsselt, bzw. entschlüsselt und es werden keine Satzzeichen berücksichtigt.
Weiß jemand die Lösung meines Problems?
Wie müssen die Zahlen geändert werden, damit alles berücksichtigt wird?
MfG
UdoVogel

[edit=alcaeus]Delphi-Tags eingefuegt und Personality richtig gesetzt. In Zukunft bitte selbst machen, Danke. Mfg, alcaeus[/edit]

Jan 10. Jul 2005 17:21

Re: Verschlüsselung mit dem Caesar Verfahren
 
Delphi-Quellcode:
procedure TForm1.BVerschluesselnClick(Sender: TObject);
var parameter, x, s, y: integer;
    alphabet, a: string;
    b: char;
begin
  MAusgabe.Text:='';
  alphabet:=MEingabe.Text;
  parameter:=Para.Value;
   for y:=1 to length(alphabet) do
    begin
     s:=ord(alphabet[y]);
     if (s>=65) and (s<=90) then
         b:=chr((((s-65)+parameter) mod 26)+65);
     else if (s>=97) and (s<=122) then
         b:=chr((((s-97)+parameter) mod 26)+97);
     a=a+b;
    end;
    MAusgabe.Lines.Add(a);
end;

Das ist alles ungetestet und ich hab ewig nix mehr in Delphi geschrieben. Nutzung ist also auf eigene Gefahr und für etwaige Hirnschäden wird keine Haftung übernommen. Sollte vom Prinzip her aber stimmen.
Gruß
Jan

UdoVogel 10. Jul 2005 17:39

Re: Verschlüsselung mit dem Caesar Verfahren
 
Sorry, aber das funktioniert nicht.
Wenn man einen Satz zB " Hallo wie gehts? " mit dem parameter 1 verschlüsselt und anschließend entschlüsselt, dann erhält man: " ÈȬ¬¯¯·©¥¥§¥¨´³³ "
Aber trotzdem danke für deinen Ansatz.
Gruß
UdoVogel

Jan 10. Jul 2005 17:50

Re: Verschlüsselung mit dem Caesar Verfahren
 
Nein 100% hat es nicht geklappt, wie gesagt ewig nix mehr in delphi gemacht, aber mit ein wenig Eigeninitiative wäre man auf folgendes gekommen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var parameter, x, s, y: integer;
    alphabet, a: string;
    b: char;
begin
  Memo1.Text:='';
  alphabet:=Edit1.Text;
  parameter:=2;
   for y:=1 to length(alphabet) do
    begin
     s:=ord(alphabet[y]);
     if (s>=65) and (s<=90) then
         b:=chr((((s-65)+parameter) mod 26)+65)
     else if (s>=97) and (s<=122) then
         b:=chr((((s-97)+parameter) mod 26)+97)
     else
         b:=alphabet[y];
     a:=a+b;
    end;
    Memo1.Lines.Add(a);
end;
Und das ist sogar getestet, klappt also auch.

Gruß
Jan

marabu 10. Jul 2005 18:16

Re: Verschlüsselung mit dem Caesar Verfahren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ein etwas anderer Ansatz:

Delphi-Quellcode:
function EncodedStr(const text, abNormal, abCaesar: string): string;
var
  i, j: integer;
begin
  SetLength(Result, Length(text));
  for i := 1 to Length(text) do begin
    j := Pos(text[i], abNormal);
    if j = 0
      then Result[i] := text[i]
      else Result[i] := abCaesar[j];
  end;
end;
Grüße vom marabu

nailor 10. Jul 2005 18:21

Re: Verschlüsselung mit dem Caesar Verfahren
 
marabu, du hast nen tritt in den hintern verdient. ich hab die letzten 5 minuten meines lebens damit verbracht, das zu machen, was du gemacht hast (ne saubere Methode zu schreiben) und dann war es umsonst... *grml*

marabu 10. Jul 2005 18:22

Re: Verschlüsselung mit dem Caesar Verfahren
 
autsch...

@Udo: Willkommen im Forum.

UdoVogel 10. Jul 2005 18:58

Re: Verschlüsselung mit dem Caesar Verfahren
 
@ Jan:
Weißt du, wie ich die Zahlen, bzw. Vorzeichen ändern muss, wenn ich auch einen Button zum Entschlüsseln einbauen will?
Im Moment kann ich ja schlecht schaun, ob das wirklich funktioniert.

@ Marabu & Nailor:
Danke für eure alternative Methode, aber dafür reichen meine Delphi-Kenntnisse nicht aus. :wink:

Jan 10. Jul 2005 20:50

Re: Verschlüsselung mit dem Caesar Verfahren
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var parameter, x, s, y: integer;
    alphabet, a: string;
    b: char;
begin
  Memo1.Text:='';
  alphabet:=Edit1.Text;
  parameter:=2;
   for y:=1 to length(alphabet) do
    begin
     s:=ord(alphabet[y]);
     if (s>=65) and (s<=90) then
         b:=chr((((s-65)+(26-parameter)) mod 26)+65)
     else if (s>=97) and (s<=122) then
         b:=chr((((s-97)+(26-parameter)) mod 26)+97)
     else
         b:=alphabet[y];
     a:=a+b;
    end;
    Memo1.Lines.Add(a);
end;
Das ist entschlüsseln.

Ich versteh aber nicht so ganz warum du das wissen willst.
Musst du das als Hausaufgabe machen? Weil das war soo eine kleine Veränderung, wenn du dir das auch nur annähernd angesehen hättest wärste da auch selber drauf gekommen. Wofür machste das dann überhaupt, wenn du es dir selber nicht anschaust?
Gruß
Jan


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:14 Uhr.

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