![]() |
Text-Verschlüsselungsprogramm
Hallo!
Ich habe ein Problem mit einem Verschlüsselungsprogramm für Text, das ich selber geschrieben habe; das funktioniert auch so weit. Nur wenn ich einen längeren Text verschlüsseln lassen will, ist der Text, der dann rauskommt immer viel zu kurz. Wenn ich ihn dann entschlüsseln lasse, kommt auch nur ein bruchteil vom Originaltext raus! Was mache ich da falsch? Hier der Code:
Delphi-Quellcode:
Ich hoffe, ihr könnt mir helfen!
unit Ulticrypt_U;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Button1: TButton; Edit3: TEdit; //Feld für das Passwort Label3: TLabel; Memo1: TMemo; //Originaltext Memo2: TMemo; //Verschlüsselter Text Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); //Die Prozedur fürs Verschlüsseln var S, P:string; I, J:integer; begin S:=Memo1.Text; P:=Edit3.Text; J:=1; try for I:=1 to Length(S) do begin S[I]:=Chr(Ord(S[I]) xor Ord(P[J])); inc(J); if J> Length(P) then J:=1; end; Memo2.Text:=S; except ShowMessage(' Sie müssen ein Passwort eingeben!'); end; end; procedure TForm1.Button2Click(Sender: TObject); //Die Prozedur fürs Entschlüsseln var S, P:string; I, J:integer; begin S:=Memo2.Text; P:=Edit3.Text; J := 1; try for I := 1 to Length(S) do begin S[I] := Chr(Ord(S[I]) xor Ord(P[J])); Inc(J); if J > Length(P) then J := 1; Memo1.Text:=S; end; except ShowMessage(' Sie müssen ein Passwort eingeben!'); end; end; end. |
Re: Text-Verschlüsselungsprogramm
Dann wird wahrscheinlich ein Zeichen im verschlüsselten Text #0 (also Zeichen an Textstelle==Zeichen im Passwort) sein, und damit ist der Text für die andere Procedure zu Ende...
|
Re: Text-Verschlüsselungsprogramm
Und was kann ich dagegen machen? Ich kann doch nicht aus dem ganzen Text alle Zeichen raussuchen, die auch im Passwort vorhanden sind!?!?
|
Re: Text-Verschlüsselungsprogramm
Hallo Ultimator,
Du musst mit Streams arbeiten. z.B.
Delphi-Quellcode:
Achtung: Es handelt sich hierbei um eine extrem primitive Verschlüsselung. Die Verschlüsselung hat auch nur Anschauungscharakter. Habe ich mal für eine AG verwendet
procedure TFormCrypt.SaveCrypt(const Filename: TFilename);
var MStream : TMemoryStream; FileStream : TFilestream; aByte : Byte; begin MStream:=TMemoryStream.Create; FileStream:=TFilestream.Create(Filename,fmCreate); Try memText.Lines.SaveToStream(MStream); // Memo in einen MemoryStream speichern MStream.Position:=0; While MStream.Position<MStream.Size do begin MStream.Read(aByte,SizeOf(Byte)); aByte:=aByte xor iKey; // Verschlüsselung FileStream.Write(aByte,SizeOf(Byte)); end; Finally MStream.Free; Filestream.Free; end; end; procedure TFormCrypt.LoadCrypt(const Filename: TFilename); var MStream : TMemoryStream; FileStream : TFilestream; aByte : Byte; begin MStream:=TMemoryStream.Create; FileStream:=TFilestream.Create(Filename,fmOpenRead); Try FileStream.Position:=0; While FileStream.Position<FileStream.Size do begin FileStream.Read(aByte,SizeOf(Byte)); aByte:=aByte xor iKey; // Entschlüsselung MStream.Write(aByte,SizeOf(Byte)); end; MStream.Position:=0; memText.Lines.LoadFromStream(MStream); Finally MStream.Free; Filestream.Free; end; end; |
Re: Text-Verschlüsselungsprogramm
Tach Ultimator,
bestimmte Steuerzeichen sollte Dein String nicht beinhalten, da sonst von einem Ende des Strings ausgegangen wird und ausserdem können nicht alle Ascii-Zeichen als String ausgegeben werden (z.B. manche Steuerzeichen). Das ist auch der Grund, aus dem Dein String nicht komplett angezeigt wird. :!: Keine Sorge, Du musst Deinen String nicht nach solchen Zeichen durchforsten. :zwinker: Zu Deinem symmetrischen Algorithmus folgender Vorschlag: Speichere den verschlüsselten String gleich in einem BYTE-Array ab und schaue Dir dann die unterschiedlichen Zahlenwerte darin an. Dann wirst Du bemerken, dass Dein String nicht abgeschnitten wurde, sondern manche Bereiche lediglich nicht angezeigt werden können. Beim entschlüsseln ziehst Du Deine Zahlenwerte (in Deinem Beispiel mittels XOR) wieder zurück in den String und enthältst den ursprünglichen Text wieder in seiner entschlüsselten Form. |
Re: Text-Verschlüsselungsprogramm
Ich hab jetz die Lösung von Jens ausprobiert, aber jedes mal, wenn ichs Compilieren will, zeigt mir DELPHI an, dass Memo1 (das Feld, wo der Text zum verschlüsseln rein muss) ein undefinierter Bezeichner ist. Aber ohne die Lösung mit Streams findet er das Memo! Warum? Des kann doch eigentlich gar net sein! Oder bin ich zu blöd dafür? :wiejetzt:
|
Re: Text-Verschlüsselungsprogramm
Hallo,
das Memo in meinem Vorschlag heißt nicht Memo1 sondern memText. |
Re: Text-Verschlüsselungsprogramm
Hier ist der Code, ich hab erst die Verschlüsselungs-Prozedur umgeschrieben:
Delphi-Quellcode:
unit Ulticrypt_U;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TTCryptForm = class(TForm) Label1: TLabel; Label2: TLabel; Button1: TButton; Edit3: TEdit; Label3: TLabel; memText: TMemo; Memo2: TMemo; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var TCryptForm: TCryptForm; implementation {$R *.dfm} procedure Button1Click(const Filename: TFilename); var MStream : TMemoryStream; FileStream : TFilestream; aByte : Byte; begin MStream:=TMemoryStream.Create; FileStream:=TFilestream.Create(Filename,fmCreate); Try memText.SaveToStream(MStream); // Memo in einen MemoryStream speichern MStream.Position:=0; While MStream.Position<MStream.Size do begin MStream.Read(aByte,SizeOf(Byte)); aByte:=aByte xor iKey; // Verschlüsselung FileStream.Write(aByte,SizeOf(Byte)); end; Finally MStream.Free; Filestream.Free; end; end; procedure TTCryptForm.Button2Click(Sender: TObject); var S, P:string; I, J:integer; begin S:=Memo2.Text; P:=Edit3.Text; J := 1; try for I := 1 to Length(S) do begin S[I] := Chr(Ord(S[I]) xor Ord(P[J])); Inc(J); if J > Length(P) then J := 1; Memo1.Text:=S; end; except ShowMessage(' Sie müssen ein Passwort eingeben!'); end; end; end. |
Re: Text-Verschlüsselungsprogramm
der name des memo muss doch angeglcihen werden oder?
Zitat:
|
Re: Text-Verschlüsselungsprogramm
Hallo,
so sollte es gehen:
Delphi-Quellcode:
...
TTCryptForm = class(TForm) Label1: TLabel; Label2: TLabel; Button1: TButton; Edit3: TEdit; Label3: TLabel; memText: TMemo; Memo2: TMemo; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private-Deklarationen } procedure SaveCrypt(const Filename: TFilename); public { Public-Deklarationen } end; ... procedure TFormCrypt.SaveCrypt(const Filename: TFilename); var MStream : TMemoryStream; FileStream : TFilestream; aByte : Byte; begin MStream:=TMemoryStream.Create; FileStream:=TFilestream.Create(Filename,fmCreate); Try memText.SaveToStream(MStream); // Memo in einen MemoryStream speichern MStream.Position:=0; While MStream.Position<MStream.Size do begin MStream.Read(aByte,SizeOf(Byte)); aByte:=aByte xor iKey; // Verschlüsselung FileStream.Write(aByte,SizeOf(Byte)); end; Finally MStream.Free; Filestream.Free; end; end; ... procedure Button1Click(Sender : TObject); begin SaveCrypt('c:\Text.cyt'); end; ... |
Re: Text-Verschlüsselungsprogramm
Zitat:
Delphi-Quellcode:
D.h. die Namen sind schon Ok.
memText: TMemo
Memo2: TMemo; Nur Ultimator hat die procedure Button1Click so verändert, dass es keine Methode mehr von TFormCrypt ist. Deshalb werden die Memos nicht gefunden. |
Re: Text-Verschlüsselungsprogramm
ach k ich hatte das übersehen :oops:
|
Re: Text-Verschlüsselungsprogramm
Danke Leute! Jetzt funktionierts! :thuimb: Ich werd jetz weiter dran arbeiten!
|
Re: Text-Verschlüsselungsprogramm
Könnte mir mal jmd. erklären, was es mit der iKey Variable oder Konstante aufsich hat?! Hab hier im Forum schon geguckt, aber aufschlussreiches dazu hab ich nicht gefunden.
|
Re: Text-Verschlüsselungsprogramm
:hi:
![]() ganz unten wird einewenig auf XOR-Verschüsselung eingegangen ... falls das nicht reichen sollte -> Google :wink: mfg Tobias |
Re: Text-Verschlüsselungsprogramm
Der iKey ist das Passwort, mit dem der Text verschlüsselt wird. Man kann ihn im Edit-Feld eingeben.
|
Re: Text-Verschlüsselungsprogramm
Dank dir Mirilin.. ich hab iKey erstmal als Konstante fest vergeben... und da funzt es.. :zwinker:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:41 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