AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Text-Verschlüsselungsprogramm

Ein Thema von Ultimator · begonnen am 5. Mär 2004 · letzter Beitrag vom 14. Apr 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#1

Text-Verschlüsselungsprogramm

  Alt 5. Mär 2004, 20:53
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:
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.
Ich hoffe, ihr könnt mir helfen!
Julian J. Pracht
  Mit Zitat antworten Zitat
Benutzerbild von The-X
The-X

Registriert seit: 30. Aug 2003
Ort: Woffelsbach / user.exe ;)
377 Beiträge
 
Delphi 7 Personal
 
#2

Re: Text-Verschlüsselungsprogramm

  Alt 8. Mär 2004, 17:22
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...
WGET ftp://root@fbi.us.gov/secret/worldreign.exe <- damit werde ich die Weltherrschaft an mich reissen!
=> irc://irc.quakenet.eu.org:6667/delphi.de da werden Sie auch (manchmal) geholfen
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Text-Verschlüsselungsprogramm

  Alt 9. Mär 2004, 12:23
Und was kann ich dagegen machen? Ich kann doch nicht aus dem ganzen Text alle Zeichen raussuchen, die auch im Passwort vorhanden sind!?!?
Julian J. Pracht
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Text-Verschlüsselungsprogramm

  Alt 9. Mär 2004, 12:40
Hallo Ultimator,
Du musst mit Streams arbeiten.
z.B.
Delphi-Quellcode:
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;
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
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Dannyboy

Registriert seit: 4. Aug 2003
Ort: Delphi-Heaven
418 Beiträge
 
Delphi 7 Personal
 
#5

Re: Text-Verschlüsselungsprogramm

  Alt 9. Mär 2004, 12:49
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.

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.
How much wood would a wood-chuck chuck if a wood-chuck would chuck wood?
Check this out.
DANNYBOY
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Text-Verschlüsselungsprogramm

  Alt 9. Mär 2004, 19:18
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?
Julian J. Pracht
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#7

Re: Text-Verschlüsselungsprogramm

  Alt 9. Mär 2004, 19:21
Hallo,
das Memo in meinem Vorschlag heißt nicht Memo1 sondern memText.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#8

Re: Text-Verschlüsselungsprogramm

  Alt 9. Mär 2004, 19:33
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.
Julian J. Pracht
  Mit Zitat antworten Zitat
Benutzerbild von zecke
zecke

Registriert seit: 17. Jan 2004
494 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Text-Verschlüsselungsprogramm

  Alt 9. Mär 2004, 19:36
der name des memo muss doch angeglcihen werden oder?

Zitat:
Try
memText.SaveToStream(MStream); // Memo in einen MemoryStream speichern
MStream.Position:=0;
While MStream.Position<MStream.Size do
weil du benutzt Memo1 und nicht memText als Name des Memo
mfg zecke
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#10

Re: Text-Verschlüsselungsprogramm

  Alt 9. Mär 2004, 19:37
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;
...
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:35 Uhr.
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