Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Aufruf von Verschlüsselungsverfahren (https://www.delphipraxis.net/55796-aufruf-von-verschluesselungsverfahren.html)

Avax2k 27. Okt 2005 04:05


Aufruf von Verschlüsselungsverfahren
 
Hallo ich habe ein Verschlüsselungsalgorithmus in einer separaten Unit gespeichert, die ich Crypt genannt habe. Diese enthält am Ende die Funktionen Encode und Decode, soweit so gut.

in meiner Hauptform habe ich sie auch deklariert:

uses Crypt;

im laufe des Programmes greife ich auf eine Abfrage zu, die ich in einer Ini-Datei abspeicher.
Diese sieht wie folgt aus:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var ini : TIniFile;
begin
ini := TIniFile.Create(ExtractFilePath(ParamStr(0))+ 'key.ini');
if Edit1.Text = Edit2.Text then
begin
ini.WriteString('Text', 'Key', Edit2.Text);
ShellExecute(Application.Handle, 'open', 'winver.exe',nil,nil,SW_SHOW);
Form1.Close;
end
else
Label1.Caption := 'klappt nicht';
ini.free;
hinzu habe ich noch eine Funktion beim Aufruf des hauptprogrammes gleich in der Form:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var ini : TIniFile;
P: String;
begin
Edit2.Text := '';
Label1.Caption := '';
Label2.Caption := '';
ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'key.ini');
P := Ini.ReadString('Text', 'Key', Edit2.Text);
if Edit1.Text = P then
begin
ShellExecute(Application.Handle, 'open', 'winver.exe',nil,nil,SW_SHOW);
Application.Terminate();
end;
end;
nun will ich wenn, key.ini noch keine Inhalte hat und erst durch Button1.Click erstellt wird,
diese gleich verschlüsseln mit der Encode-Funktion der Crypt.Unit, jedoch weiss ich nicht wie ich dies anstellen soll, denn wenn ich Encode schreibe kommt der Fehler, dass Encode nicht deklariert ist, obwohl ich ja in der Crypt.Unit folgendes habe:
Delphi-Quellcode:
function Encode(const Value, Password: String): String;
begin
  Result := BinToHexStr(RC4Code(Value, Password));
end;
somit ist Encode da nur ich weiss eben nicht wie ich es ausführen soll. Encode soll den Eintrag aus Edit2.Text nehmen und verschlüsseln und erst dann soll die key.ini erstellt werden mit eben dem verschlüsseltem Inhalt.

Das gleiche gilt für den Decode-Befehl den ich dann im FormCreate aufrüfen würde um zuerst das Edit2.Text Feld aus der key.ini Datei zu entschlüsseln und dann erst übergeben.

Hoffe jemand kann mir weiterhelfen. Bitte mit Quellcode

[edit=Sharky]Quote-Tags durch Delphi-Tags ersetzt. Mfg, Sharky[/edit]

chaosben 27. Okt 2005 05:12

Re: Aufruf von Verschlüsselungsverfahren
 
Hast du denn in der unit Crypt die Funktion auch richtig deklariert?
Delphi-Quellcode:
unit Crypt;

interface
function Encode(const Value, Password: String): String;

implementation
function Encode(const Value, Password: String): String;
begin
Result := BinToHexStr(RC4Code(Value, Password));
end;
Wichtig ist, das die Deklaration im Interface-Teil steht, sonst wissen die anderen Units, die diese Unit includen, nicht was die Crypt-Unit alles zur Verfügung stellt.

Avax2k 27. Okt 2005 11:21

Re: Aufruf von Verschlüsselungsverfahren
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var ini : TIniFile;
begin
ini := TIniFile.Create(ExtractFilePath(ParamStr(0))+ 'key.ini');
if Edit1.Text = Edit2.Text then
begin
Encode(Edit2.Text, 'abcdefgh12345678');
ini.WriteString('Text', 'Key', Edit2.Text);
ShellExecute(Application.Handle, 'open', 'winver.exe',nil,nil,SW_SHOW);
Form1.Close;
end
else
Label1.Caption := 'klappt nicht';
ini.free;
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var ini : TIniFile;
P: String;
begin
Edit2.Text := '';
Label1.Caption := '';
Label2.Caption := '';
ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'key.ini');
P := Ini.ReadString('Text', 'Key', Edit2.Text);
Decode(P, 'abcdefgh12345678');
if Edit1.Text = P then
begin
ShellExecute(Application.Handle, 'open', 'winver.exe',nil,nil,SW_SHOW);
Application.Terminate();
end;
end;
mit diesem Implementierung kommt zwar kein Fehler mehr und das programm wird komiliert, jedoch wird Edit2.text am Anfang gar nicht verschlüsselt sondern einfach so wie es ist in die ini gespeichert.
Genau so funktioniert Decode nicht.

die Bezeichnung für beide ist:
Delphi-Quellcode:
function Encode(const Value, Password:String):String;
function Decode(const Value, Password:String):String;
wie muss ich den befehl jetzt eingeben, damit er doch noch verschlüsselt ?

Avax2k 27. Okt 2005 13:26

Re: Aufruf von Verschlüsselungsverfahren
 
Es wäre auch kein Problem, wenn ich die gesamte Ini Datei verschlüsseln würde und nicht nur den Eintrag aus Edit2.text...

also wer mir dabei helfen kann, soll nicht zögern!

marabu 27. Okt 2005 14:13

Re: Aufruf von Verschlüsselungsverfahren
 
So verschlüsselst du und wirfst das Eregbnis in den Bit-Orkus:

Delphi-Quellcode:
Encode(Edit2.Text, 'abcdefgh12345678');
ini.WriteString('Text', 'Key', Edit2.Text);
Bedenke, dass Encode() eine Funktion ist - der Rückgabewert ist das Ergebnis deiner Verschlüsselung:

Delphi-Quellcode:
ini.WriteString('Text', 'Key', Encode(Edit2.Text, 'abcdefgh12345678'));
Grüße vom marabu

Avax2k 27. Okt 2005 18:17

Re: Aufruf von Verschlüsselungsverfahren
 
danke für die Antwort marabu :) , jeodhc habe ich jetzt ein erneutes Problem

beim folgendem Aufruf
Delphi-Quellcode:
ini.WriteString('Text', 'key', Encode(Edit2.Text, 'a');
...
// wird das Edit2.text Feld ordnungsgemäß encodiert nun zu meinem Problem..
...
ini.ReadString('Text', 'key', Decode(Edit2.Text, 'a');
// hier kommt plötzlich als Ergebnis '' heraus, sprich ein leeres Feld und nicht die gewünschte
//Umwandlung des encodierten Strings wieder in seine Ausgangsform..was kann der Grund dafür sein??

//hier die Encode und die Decode funktion..

function Encode(const Value, Password: String): String;
begin
  Result := BinToHexStr(RC4Code(Value, Password));
end;
...
function Decode(const Value, Password: String): String;
begin
  Result := RC4Code(HexToBinStr(Value), Password);
end;
hoffe dass auch hierbei mir geholfen werden kann.

marabu 27. Okt 2005 18:52

Re: Aufruf von Verschlüsselungsverfahren
 
Es gilt das gleiche Prinzip:

Delphi-Quellcode:
Edit2.Text := Decode(ini.ReadString('Text', 'key', ''), 'a');
Du willst doch den Funktionswert von ReadString decodieren...

marabu

Avax2k 27. Okt 2005 19:01

Re: Aufruf von Verschlüsselungsverfahren
 
supi danke sehr dafür. Jetzt läuft es problemlos durch.
Danke dass ihr nicht all zu genervt über mein Unwissen seid. :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:05 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-2025 by Thomas Breitkreuz