![]() |
Einlesen von Verschlüsselter Datei funktioniert nicht richti
Hallo zusammen,
Habe mal wieder ein Problem. Ich bin jetzt an dem Punkt angekommen, das ich von meinem Programm die verschlüsselte Lizenzdatei einlesen lassen will. Die Lizenzdatei erstelle ich mit einem selbst geschriebene Programm, in dem der Lizenzcode, bestehend aus verschiedenen Kundeninformationen zusammengesetzt wird, dann XOR verschlüsselt wird und zum Schluß in einer Datei gespeichert wird.
Delphi-Quellcode:
Lese ich die Datei nun in meinem Programm ein, funktioniert das ganze auch ganz gut, bis auf das mein Ergebnis mit zusätzlichen Zeichen versehen ist.
for A := 1 to Length (Lizenzdatei)do
begin Lizenzdatei[A] := Char(Byte(Lizenzdatei[A]) xor 42); end; Memo1.Text := Lizenzdatei; Memo1.Lines.SaveToFile('..\Liz\'+Kundenname+'.liz'); Jens HartmannWohnhausV1.00V1.00.25.01.2009.1HU2009SER1D iese Lizenz sollte bitte nicht genutzt werden //Soll String Jens' HartmannWohnhausV1.00V1.00.25.01.2009.1HU2009SER1D iese' Lizenz' sollte' bitte' nicht' genutzt' werden //Ist String Einlese Vorgang:
Delphi-Quellcode:
:coder2: :gruebel:
Memo2.Lines.LoadFromFile('.\Liz\'+Kundenname+'.liz');
Lizenzdatei := Memo2.Text; for A := 1 to Length (Lizenzdatei)do begin Lizenzdatei[A] := Char(Byte(Lizenzdatei[A]) xor 42); end; Memo2.Text := Lizenzdatei; end; Meine Frage ist nun, wie kommt das und wie kann ich das ändern? Danke schon mal MFG Jens |
Re: Einlesen von Verschlüsselter Datei funktioniert nicht ri
Besitzt die Datei Zeilentrenner
|
DP-Maintenance
Dieses Thema wurde von "mkinzler" von "XML" nach "Sonstige Fragen zu Delphi" verschoben.
|
Re: Einlesen von Verschlüsselter Datei funktioniert nicht ri
In meinem Programm, womit ich die Datei erstelle, sind eingendlich keine Zeilentrenner vorhanden.
Ich hänge mal eine Datei an. Hier mal die komplette Procedure zum erstellen der Datei
Delphi-Quellcode:
MFG
procedure TForm1.BTErstellenClick(Sender: TObject);
var Stammdaten : String; Kunde : String; Kundenname : String; Ansprechpartner : String; Matchcode : String; Objekt : String; Anschrift : String; Straße : String; Hausnummer : String; Wohnort : String; PLZ : String; Ort : String; Tel : String; Fax : String; EMail : String; Version : String; Seriennummer : String; Lizenznummer : String; Lizenzdatei : String; A : Integer; Erstellen : String; F : Textfile; begin Kundenname := DBEdit1.Text; Ansprechpartner := DBEdit2.Text; Matchcode := DBEdit3.Text; Objekt := DBEdit4.Text; Straße := DBEdit5.Text; Hausnummer := DBEdit6.Text; PLZ := DBEdit7.Text; Ort := DBEdit8.Text; Tel := DBEdit9.Text; Fax := DBEdit10.Text; EMail := DBEdit11.Text; Version := CBVersion.Text; Seriennummer := EDSeriennummer.Text; Lizenznummer := EDLizenznummer.Text; Anschrift := Straße+Hausnummer; Wohnort := PLZ+Ort; Lizenzdatei := Kundenname+Objekt+ Version+Seriennummer+Lizenznummer+ 'Diese Lizenz sollte bitte nicht genutzt werden'; MMLizenzdatei.Clear; MMLizenzdatei.Lines.Append(Lizenzdatei); Memo1.Text := Lizenzdatei; Delay(4000); for A := 1 to Length (Lizenzdatei)do begin Lizenzdatei[A] := Char(Byte(Lizenzdatei[A]) xor 42); end; Memo1.Text := Lizenzdatei; Memo1.Lines.SaveToFile('..\Liz\'+Kundenname+'.liz'); Delay(1000); TabSheet4.Show; BTErstellen.Enabled := False; BTKundendatenerstellen.Enabled := True; end; Jens |
Re: Einlesen von Verschlüsselter Datei funktioniert nicht ri
Die Zeichen scheinen durch die Leerzeichen zu entstehen. Ersetzte diese mal vor der Verschlüsselung durch ein anderes Zeichen
|
Re: Einlesen von Verschlüsselter Datei funktioniert nicht ri
Ja genau, die Zeichen entstehen durch die Leerzeichen,
Das Problem ist nur, diese Leerzeichen, können ja immer wieder vorkommen. Habe mal überlegt, ob ich eventuell den String, vor dem speichern und nach dem lesen bearbeiten kann. Das Problem ist halt nur beim lesen, woher soll mein Programm wissen wo mal Leerzeichen waren und jetzt wieder hingehören.
Delphi-Quellcode:
MFGsl[i] := StringReplace(sl[i], #0, ' ', [rfReplaceAll]); Jens |
Re: Einlesen von Verschlüsselter Datei funktioniert nicht ri
Delphi-Quellcode:
Was wird das denn ?
sl[i] := StringReplace(sl[i], #0, ' ', [rfReplaceAll]);
Also ich würde mir erst mal den Ausgangsstring in Hex anschauen. Da muss ausser den Leerzeichen noch was drin sein. Durch ein zeichenweises XOR wird das nicht dabei herauskommen. Und das Memo würde ich höchstens zur Anzeige benutzen, nicht jedoch um die Daten darin zu verschlüsseln. Memo.Text wird dir immer ein CRLF ans Ende hängen, weil es glaubt hier ist eine Zeile zu Ende. Also beginne am Anfang das Problem zu untersuchen, und speichere deinen String mal ab und schau ihn dir in einem Hex-Editor an. Gruss |
Re: Einlesen von Verschlüsselter Datei funktioniert nicht ri
Durch die XOR-Verschlüsselung entstehen binäre Daten, die man mit einem TMemo oder TStringList nicht sauber laden oder speichern kann.
Daher folgende Funktionen verwenden (irgendwo geklaut aus der DP):
Delphi-Quellcode:
function FileToString(const FileName: string): AnsiString;
var fs: TFileStream; Len: Integer; begin fs := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite); try Len := fs.Size; SetLength(Result, Len); if Len > 0 then fs.ReadBuffer(Result[1], Len); finally fs.Free; end; end; Procedure StringToFile(const FileName, Str: string); var fs: TFileStream; Len: Integer; begin fs := TFileStream.Create(FileName, fmcreate); try Len := Length(Str); fs.Write(Str[1], Len); finally fs.Free; end; end; |
Re: Einlesen von Verschlüsselter Datei funktioniert nicht ri
So, mal wieder Weltklasse.
Jetzt sitze ich einen ganzen Sontag vor einem Problem, Habe so gut wie alle Schreib und Lese Befehle ausprobiert, die mein Delphiwissen und meine Bücher hergeben, nur auf Stream, da bin ich nicht drauf gekommen. Danke Danke Danke Jetzt Funtz alles. MFG Jens War mal wieder absolut genial, Danke. :thumb: :thumb: :thumb: :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:57 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