Autor Beitrag
miLi0
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mo 25.12.06 00:38 
Hallo also ich hab folgende Aufgabe bekommen,

Über den Klartext wird ein Schlüsselwort gelegt. Die Addition des ASCII-Codes des Klarbuchstaben und Buchstaben des Schlüsselwortes gibt den ASCII-Code des Geheimbuchstaben. Ein Beispiel mit dem Schlüsselwort „AUTO“, (Leerzeichen= 32)
ausblenden Delphi-Quelltext
1:
2:
3:
Schlüsselwort:           A    U    T    O    A    U    T    O
Klartext:                I    C    H         H    A    B    E 
Geheimtext (ASCII-Wert): 138 152  156  111  137  150  150  148

Beachten Sie, aus ‚H’ wird sowohl 156 als auch 137 und 150 steht sowohl für ‚A’ als auch für ‚B’.


Ich hab das soweit auch schon hinbekommen mit dem Verschlüsseln, nur bekomm ich das Entschlüsseln nicht hin. und das der ein leerzeichen lässt beim verschlüsseln krieg ich auch nicht hin, hat jemand ne idee?

ausblenden volle Höhe 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:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
procedure TChiffrierprogramm.bt_oeffnenClick(Sender: TObject);
begin
if oeffnen.Execute then // Öffnen einer Datei
mem_klartext.lines.loadfromfile(oeffnen.filename)
end;

procedure TChiffrierprogramm.bt_speichernClick(Sender: TObject);
begin
if speichern.execute then  // Speichern in deine Datei
mem_geheimtext.lines.savetofile(speichern.filename+'.txt')
end;


function verschluessle(inhalt, key: string): string;
var neu: char; a,b :string;
    zaehler, pos, verschiebung :integer;
begin
     a:= Chiffrierprogramm.mem_klartext.text;
     b:= Chiffrierprogramm.ed_schluesselwort.text;
     a:= lowercase (a);
     b:= lowercase (b);
     result:='';
 for zaehler := 1 to length(a) do
    begin
    if  a[zaehler] <> ' ' then
    begin
      pos := zaehler mod length(b);
        if (pos = 0then pos := length(b);
          verschiebung := ord (b[pos]) - 97;
          neu := chr (ord(a[zaehler]) + verschiebung );
             if (ord( neu )>122then
             neu := chr (ord(neu) - 26 );
             result := result + neu;
             Chiffrierprogramm.mem_geheimtext.text:=result;
        end;
    end
end;


procedure TChiffrierprogramm.bt_verschluesselnClick(Sender: TObject);
var a : String;
begin
     verschluessle(a,a);
     mem_klartext.clear;
end;


function entschluesslen(inhalt, key: string): string;
var neu: char;
    a, b : string;
    zaehler, pos, verschiebung : integer;
begin
     a:= Chiffrierprogramm.mem_geheimtext.text;
     b:= Chiffrierprogramm.ed_schluesselwort.text;
     a:= lowercase (a);
     b:= lowercase (b);
     result:='';
 for zaehler := 1 to length(a) do
    begin
    pos := zaehler div length(b);
      if (pos = 0then pos := length(b);
        verschiebung := ord (b[pos]) + 97;
        neu := chr (ord(a[zaehler]) + verschiebung );
           if (ord( neu )>122then
           neu := chr (ord(neu) + 26 );
           result := result + neu;
           Chiffrierprogramm.mem_klartext.text:=result;
      end;

end;


procedure TChiffrierprogramm.bt_entschluesselnClick(Sender: TObject);
var a : String;
begin
     entschluesslen(a,a);
     mem_geheimtext.clear;
end;



Moderiert von user profile iconChristian S.: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am So 24.12.2006 um 23:45
Chryzler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: Mo 25.12.06 00:40 
Hier hab ich eine wunderschöne Seite gefunden, die das erklärt.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19325
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 25.12.06 00:47 
user profile iconmiLi0 hat folgendes geschrieben:
und das der ein leerzeichen lässt beim verschlüsseln krieg ich auch nicht hin, hat jemand ne idee?

Nun, was das Leerzeichen angeht: Was meinst du? Was soll mit einem Leerzeichen denn passieren?

Jedenfalls seh ich mir die Entschlüsselung mal an... Aber das sieht mir eigentlich zu kompliziert aus, ich denke das geht auch einfacher (// EDIT: Ok doch nicht...). Aber mal kucken...

// EDIT:
user profile iconChryzler hat folgendes geschrieben:
Hier hab ich eine wunderschöne Seite gefunden, die das erklärt.

:rofl: Da hast du auch wieder Recht...


Zuletzt bearbeitet von jaenicke am Mo 25.12.06 01:10, insgesamt 1-mal bearbeitet
miLi0 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mo 25.12.06 00:51 
Ich wollte das der wenn ich verschlüssel das Leerzeichen auch mit in den Geheimtext übernimmt. das geschieht ja auch aber eben wenn ich z.B.

Hallo Peter
mit
otto

versclüssel

bekomme ich "vtezcishxk"

Ich will aber "vtezc dxmsf" bekommen da ja wenn ich nur peter mit otto verschlüsseln würde "dxmsf" das bekomme.

Ich verschlüssele ja das leerzeichen mit aber gibt dann bei der ausgabe trotzdem keinen wert an. Das ist mein prob.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19325
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 25.12.06 00:55 
Naja, aber im Moment tust du doch einfach gar nichts, wenn das aktuelle Zeichen ein Leerzeichen ist...
user profile iconmiLi0 hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
    if  a[zaehler] <> ' ' then					
miLi0 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mo 25.12.06 00:59 
ausblenden Delphi-Quelltext
1:
2:
3:
Schlüsselwort:           A    U    T    O    A    U    T    O
Klartext:                I    C    H         H    A    B    E 
Geheimtext (ASCII-Wert): 138 152  156  111  137  150  150  148


und ich muss es so machen das auch das leerzeichen verschlüsselt wird und dann wieder den ascii wert also jetz 111 wieder in ein zeichen ausgibt. das macht er ja auch nicht.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19325
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 25.12.06 01:05 
Ja, ist mir schon klar, aber warum hast du denn dann mit dem if dafür gesorgt, dass du nur Zeichen ungleich Leerzeichen verschlüsselst und in den verschlüsselten Text schreibst??
miLi0 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mo 25.12.06 12:54 
stimmt, hat jemand schon ne ahnung, sitz da beißend vor kriegs aber net gebacken
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19325
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 25.12.06 14:29 
Dass die Verschlüsselung gar nicht das produziert was sie laut deinem Beispiel und dem Aufgabentext soll ist dir aber hoffentlich schon klar, oder?
Diesen Algorithmus kann man auch nehmen, das ist aber nicht der, der in der Aufgabe gefordert wird.

Ich behaupte mal, dass du den irgendwo kopiert hast und dir nicht wirklich klar ist, was der eigentlich macht!

Ihr sollt einfach die Ascii-Codes komplett addieren. Der Code addiert aber nur ord (b[pos]) - 97; hinzu und rotiert dann, wenn das ganze keinen Buchstaben mehr ergeben würde...
Da kommt also Text bei heraus, bei deiner Aufgabenstellung nicht!!!

//EDIT: Ok, ich hab das mal ganz kurz geschrieben... Ich nehme an so solltet ihr das auch schreiben...
Es fehlt absichtlich noch was...
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TfrmMain.btnEncryptClick(Sender: TObject);
var
  i: Integer;
// DestString solltest du hier noch deklarieren...
begin
  SetLength(DestString, Length(memSource.Text));
  for i := 1 to Length(memSource.Text) do
    DestString[i] := Chr(Ord(memSource.Text[i]) + Ord(edtKey.Text[i mod Length(edtKey.Text)]));
  // Tja, und DestString muss vielleicht auch noch irgendwo angezeigt werden...
end;

// EDIT: :oops: :oops: :oops: Dummer Fehler behoben...
Aber die Entschlüsselung dazu bekommst du nicht von mir! Und ich möchte auch alle anderen bitten, die nicht zu schreiben...

Dieser kleine Source ist ja wirklich nicht viel, versteh den erstmal und dann kannst du dazu auch die Entschlüsselung schreiben. Sonst frag, wenn du was nicht verstehst!! schwan


Zuletzt bearbeitet von jaenicke am Di 26.12.06 17:52, insgesamt 2-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19325
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 26.12.06 16:11 
Das hier stammt aus der identischen Fragestellung von user profile iconScraffy (hier):
user profile iconScraffy hat folgendes geschrieben:
Opps^^ sry hatte deinen Link ja völlig übersehen xD....okay habs mir angeguckt aber kannst du mir vielleicht sagen wie ich ads mit dem von mir schon geschriebenen wuelltext mahcen kann!! Das wäre doch eh viel besser!!! Thx
Erstmal die Frage: Ist deine Fragestellung exakt identisch? Also so wie die hier oben im Thread? Vor allem was das Beispiel angeht!

Und woher hast du eigentlich den Quelltext? Also von dir ist er ja offensichtlich nicht...
Scraffy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Di 26.12.06 16:32 
HI
der is z.T. von mir aber zum grösseren Teil^^ ich brauchte nur nen Dankanstoss....xD..
Scraffy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Di 26.12.06 16:44 
Okay hab mich jetzt an das beartbeiten deines Quelltextes gemacht jaenicke....was genau ist denn dieser DestString? Ich hab das noch nie gehört??? ist das ein normaler String und muss ich das dann auch genau so deklarieren!?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19325
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 26.12.06 16:51 
DestString ist ein normaler String, ja. Dest kommt von Destination. Das ist also das Ziel für den verschlüsselten String...
Und DestString hab ich den nur genannt um zu verdeutlichen, dass es ein String ist ;-).
Scraffy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Di 26.12.06 17:01 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
function entschluessle(inhalt, key: string): string;
var
  i: Integer;
  DestString : String;
begin
  SetLength(DestString, Length(Form1.memGeheimtext.Text));
  for i := 0 to Length(Form1.memGeheimtext.Text) - 1 do
    DestString[i] := Chr(Ord(Form1.memGeheimtext.Text[i]) + Ord(Form1.edschluessel.Text[i mod Length(Form1.edSchluessel.Text)]));
  Form1.memKlartext.Text:=DestString;
end;


So, dass ist raus gekommen, nachdem ich alles geändert habe, wie ich denke das es stimmt...nun leider bekomme ich nun zeichen nach dem entschlüsseln, die ich noch nie gesehen habe xD...wie kann das sein??? hab ich etwas falsch gemacht?

sry was ich vielleicht erwähnen sollte: ich rufe die Funktion in einer Prozedur so auf:

entschluessele(a,a);
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19325
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 26.12.06 17:07 
Das ist die Methode zum VERschlüsseln... :lol:
Dazu musst du lediglich seeehr wenig ändern, dann entschlüsselt es.

Aber nicht das, was bei deiner "Verschlüsselung" herauskommt, denn aus durch "deine" Methode verschlüsseltem Text könnte man den nicht wieder herausholen. Aus dem verschlüsselten Satz "Das ist ein Test." würde nur noch "dasisteintest." wieder herauskommen. ;-)

Aber wie gesagt: Du hast dort eine Verschlüsselungsmethode und du musst dazu die Entschlüsselungsmethode schreiben. Die ist aber praktisch identisch. Und wenn du den Quelltext verstanden hast, dann müsste dir auch die Entschlüsselung klar sein. Ansonsten: Frag, was du da dran nicht verstehst!

BTW: Wozu übergibst du eigentlich inhalt, key: string, wenn du die dann gar nicht benutzt??? Dann kannst du das doch auch als normele Prozedur ohne Parameter und Rückgabewert schreiben.

Aber wie ist eigentlich deine Aufgabenstellung? Die Ascii-Codes addieren, wie in der Fragestellung oben? Oder tatsächlích Text (verschlüsselten) wieder herausbekommen (das ist was anderes, das ist so ähnlich wie der von dir gepostete Quelltext).
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19325
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 26.12.06 17:14 
Ok, da du offenbar eine Funktion benutzen willst, so sieht es richtig aus (so wie du es hattest gehts auch, ist aber nicht sinnvoll), und der Aufruf geht auch anders.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
function entschluessle(inhalt, key: string): string;
var
  i: Integer;
  DestString : String;
begin
  SetLength(DestString, Length(inhalt));
  for i := 1 to Length(inhalt) do
    DestString[i] := Chr(Ord(inhalt[i]) + Ord(key[i mod Length(key)]));
  Result := DestString;
end;

//Aufruf:
  Form1.memKlartext.Text := entschluessle(Form1.memGeheimtext.Text, Form1.edschluessel.Text);


Und so wie du das geschrieben hast wäre es so richtig:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure entschluessle;
var  
  i: Integer;  
  DestString : String;  
begin  
  SetLength(DestString, Length(Form1.memGeheimtext.Text));  
  for i := 1 to Length(Form1.memGeheimtext.Text) do  
    DestString[i] := Chr(Ord(Form1.memGeheimtext.Text[i]) + Ord(Form1.edschluessel.Text[i mod Length(Form1.edSchluessel.Text)]));  
  Form1.memKlartext.Text:=DestString;
end;

// Und der Aufruf:
  entschluessle;

// EDIT: :oops: :oops: :oops: Dummer Fehler behoben...