![]() |
Verschlüsselung einer CSV Datenbank Klappt nicht ganz
Hallo Zusammen,
momentan arbeite ich an einem Programm das eine CSV-Datei als Datenbank benutzt. Diese Datei würde ich gerne Verschlüsseln. Ich Verschlüssele mit RCx Anfangs lief alles wunderbar. Wenn ich die Datei unverschlüsselt geladen hatte dann Codiert und wieder Decodiert hatte war alles super, aber wenn ich die CSV-Date verschlüsselt gespeichert und wieder geladen hatte, lädt es nicht alles in das Memo oder in das Stringgrid mittels diesem Code
Delphi-Quellcode:
er bricht dann irgendwann ab, wobei die Datenmenge nicht groß ist (3 KB)
procedure loadgrid(StringGrid: TStringGrid; const FileName: TFileName);
var csv : TStringList; i : Integer; begin csv := TStringList.create; csv.loadfromfile(Filename); stringGrid.rowCount := csv.count ; for i:=0 to csv.count -1 do begin clear(CSV[i]); StringGrid.Rows[i].Delimiter:=';'; StringGrid.Rows[i].DelimitedText:=csv[i]; end; csv.free; end; Ich glaube, das er irgendwie ein Problem beim einlesen mit "LoadfromFile" hat irgendein Zechen schmeckt ihm nicht Hier die beiden Aufrufe zum Ver- und Entschlüsseln
Delphi-Quellcode:
Ich weis ehrlich gesagt nicht wie ich damit umgehen soll und hoffe das ihr mir Helfen könnt das er alles komplett einliest und auch wieder richtig Entschlüsseln kann.procedure TForm1.Button3Click(Sender: TObject); var x: TRCxContext; I: Integer; C: Integer; STR1,STR2:String; begin stringgrid2.RowCount := stringgrid1.RowCount; stringgrid2.ColCount := stringgrid1.colcount; for I := 0 to stringgrid1.RowCount - 1 do begin for C := 0 to stringgrid1.ColCount - 1 do begin str1 := ''; str2 := ''; str1 := Stringgrid1.Cells[C,i]; setLength(str2,length(str1)); RCxInit(x,'Passwort'); RCxenCode(x, str1[1], str2[1], Length(str1)); // verschlüsseln RcxDone(x); stringgrid2.Cells[C,i] := str2; end; end; end; procedure TForm1.Button4Click(Sender: TObject); var x: TRCxContext; I: Integer; C: Integer; STR1,STR2:String; begin stringgrid3.RowCount := stringgrid2.RowCount; stringgrid3.ColCount := stringgrid2.colcount; for I := 0 to stringgrid2.RowCount - 1 do begin for C := 0 to stringgrid2.ColCount - 1 do begin str1 := ''; str2 := ''; str1 := Stringgrid2.Cells[C,i]; setLength(str2,length(str1)); RCxInit(x,'Passwort'); RCxdeCode(x, str1[1], str2[1], Length(str1)); // verschlüsseln RcxDone(x); stringgrid3.Cells[C,i] := str2; end; end; end; Ich hoffe das ich es einigermaßen gut beschrieben hab ansonsten werde ich den Post nochmal editieren falls Unklarheiten vorhanden sein sollten. Gruß Manu |
Re: Verschlüsselung einer CSV Datenbank Klappt nicht ganz
Hallo,
bevor Du die Datei in Dein StringGrid lädst solltest Du sie wieder dekodieren/entschlüsseln. Grüße Klaus |
Re: Verschlüsselung einer CSV Datenbank Klappt nicht ganz
das hat damit nicht zu tun, da er schon bei "csv.loadfromfile(Filename);" nicht die ganze datei einlädt sondern nur ein teil bis irgentwo was kommt, dass loadfromfile wohl nicht verträgt.
|
Re: Verschlüsselung einer CSV Datenbank Klappt nicht ganz
.. wenn loadfromfile eine verschlüsselte Datei einliest,
dann kannst Du davon ausgehen, dass sich darin Zeichen befinden die loadfromfile nicht schmecken werden. Das loadfromfile des StringGrids liest in der Regel TextDateien ein. Also vorher entschlüsseln und dann in das StringGrid laden. Grüße Klaus |
Re: Verschlüsselung einer CSV Datenbank Klappt nicht ganz
das hat leider alles so keinen sinn, der zerkloppt mir das immer egal wie ich es lade. Wäre es nicht vielleicht leichter die Datei an sich verschlüsselt zu speichern anstatt den Inhalt, es dann in einen Filestream zu laden um den dann zu entschlüsseln, und den Filestream dann in das Stringgrid zu laden ?
Leider hätte ich aber dazu nicht die Algorithmen, hoffe mal das ihr mir dann aushelfen könntet |
Re: Verschlüsselung einer CSV Datenbank Klappt nicht ganz
.. sollte ungefähr so gehen..
Delphi-Quellcode:
procedure loadgrid(StringGrid: TStringGrid; const FileName: TFileName);
var csv : TStringList; i : Integer; mStream: TMemoryStream begin mStream := TMemoryStream.create; decodeFile(fileName,mStream); mStream.Posistion := 0; csv := TStringList.create; csv.loadfromStream(mStream); mStream.free; stringGrid.rowCount := csv.count ; for i:=0 to csv.count -1 do begin clear(CSV[i]); StringGrid.Rows[i].Delimiter:=';'; StringGrid.Rows[i].DelimitedText:=csv[i]; end; csv.free; end;
Delphi-Quellcode:
.. ist allerdings ungetestet
procedure decodeFile(fileName:TFileName;mStream:TMemoryStream);
var x: TRCxContext; begin mStream.loadfromFile(fileName); RCxInit(x,'Passwort'); RCxdeCode(x,mStream,mStream.size); // entschlüsseln RcxDone(x); end; procedure encodeFile(fileName:TFileName;mStream:TMemoryStream); var x: TRCxContext; begin RCxInit(x,'Passwort'); RCxenCode(x,mStream,mStream.size); // verschlüsseln RcxDone(x); mStream.Position:=0; mStream.saveToFile(fileName); end; Grüße Klaus |
Re: Verschlüsselung einer CSV Datenbank Klappt nicht ganz
okay hab es eingebaut und wollte es auch gleich testen leider bekomme ich eine Zugriffsverletzung an folgender Stelle
wollte es bevor ich es Laden kann ja erst einmal codieren:
Delphi-Quellcode:
habe ich da was falsch gemacht oder kann RCx das einfach nicht ?
procedure encodeFile(fileName:TFileName;mStream:TMemoryStream);
var x: TRCxContext; begin RCxInit(x,'Passwort'); RCxenCode(x,mStream,mstream,mStream.size); // Zugriffsverletzung RcxDone(x); mStream.Position:=0; mStream.saveToFile(fileName); end; procedure TForm1.Button6Click(Sender: TObject); var test : TMemoryStream; begin test := TMemoryStream.create; test.loadfromfile('C:\Dokumente und Einstellungen\masteman\Desktop\TESTPROGRAMM\data.sux'); encodeFile('C:\Dokumente und Einstellungen\masteman\Desktop\TESTPROGRAMM\data.sux',test); end; gruß Manu |
Re: Verschlüsselung einer CSV Datenbank Klappt nicht ganz
Hallo,
Du kannst nicht den gleichen Stream als Eingangs und Ausgangsstream nehmen. Versuche es einmal damit.
Delphi-Quellcode:
Grüße
procedure encodeFile(fileName:TFileName;mStream:TMemoryStream);
var x: TRCxContext; outStream : TMemoryStream; begin outStream : TMemoryStream.create. outStream.size := mStream.size; RCxInit(x,'Passwort'); mStream.Posistion:=0; outStream.Posistion:=0; RCxenCode(x,mStream,outStream,mStream.size); RcxDone(x); outStream.Position:=0; outStream.saveToFile(fileName); outStream.free; end; Klaus |
Re: Verschlüsselung einer CSV Datenbank Klappt nicht ganz
Liste der Anhänge anzeigen (Anzahl: 1)
Den gadanken hatte ich auch schon und auch schonmal gemacht aber ebenso ohne erfolg... habe jetzt mal die RCx hochgeladen.
Ich kann mir einfach keinen reim auf die Zugriffsverletzung machen |
Re: Verschlüsselung einer CSV Datenbank Klappt nicht ganz
RCxDecode erwartet als Parameter für Source und Dest ein TByteArray das die Eingangsdaten enthält enthält bzw. die Ausgangsdaten aufnimmt.
Du übergibst aber ein Object genauer einen TMemorystream, das kann nicht funktionieren.
Delphi-Quellcode:
procedure encodeFile(fileName: TFileName; mStream: TMemoryStream);
var x: TRCxContext; begin RCxInit(x,'Passwort'); RCxenCode(x, mStream.Memory^, mStream.Memory^, mStream.size); RcxDone(x); mStream.Posistion := 0; mStream.SaveToFile(fileName); end; |
Re: Verschlüsselung einer CSV Datenbank Klappt nicht ganz
Kann mir denn dann jemand einen Algorithmus empfehlen mit dem ich einfach die Datei programmintern verschlüsseln kann und wieder entschlüsseln kann
|
Re: Verschlüsselung einer CSV Datenbank Klappt nicht ganz
Was meinst du mit "programmintern"? Und was spricht gegen den algorithmus, den du schon verwendest?
|
Re: Verschlüsselung einer CSV Datenbank Klappt nicht ganz
hi Luckie,
erstmal danke das du mir vorhin schon geholfen hast ;-) mit Programmintern meine ich das ich das schon mit meinem Prog machen will und nicht mit Truecrypt etc... naja und zu dem Algorithmus den ich jetzt benutze ... ich weis nicht wirklich wie ich das zum laufen bringen soll... bin da leider mit meinem Latein am Ende. |
Re: Verschlüsselung einer CSV Datenbank Klappt nicht ganz
Hallo Manuel,
der folgende Code läuft bei mir. Ich habe jetzt zum Testen nur 2 Memo1 benutzt aber vom Ablauf sollte es mit Deinem StringGrid ähnlich laufen.
Delphi-Quellcode:
Grüße
procedure encodeFile(fileName:TFileName;mStream:TMemoryStream);
var x: TRCxContext; outStream : TMemoryStream; begin outStream := TMemoryStream.create; outStream.size := mStream.size; RCxInit(x,'Passwort'); RCxenCode(x,mStream.memory^,outStream.memory^,mStream.size); RcxDone(x); outStream.saveToFile(fileName); outStream.free; end; procedure decodeFile(fileName:TFileName;mStream:TMemoryStream); var x: TRCxContext; outStream: TMemoryStream; begin outStream := TMemoryStream.Create; mStream.loadfromFile(fileName); outStream.size := mStream.size; RCxInit(x,'Passwort'); RCxdeCode(x,mStream.memory^,outStream.memory^,mStream.size); // entschlüsseln RcxDone(x); mStream.LoadFromStream(outStream); outStream.Free; end; // verschlüsseln procedure TForm1.Button1Click(Sender: TObject); var mStream : TMemoryStream; begin mStream := TMemoryStream.Create; memo1.Lines.SaveToStream(mStream); encodeFile('d:\rcxtest.dat',mStream); mStream.free; end; // entschlüsseln procedure TForm1.Button2Click(Sender: TObject); var mStream : TMemoryStream; begin mStream := TMemoryStream.Create; decodeFile('d:\rcxtest.dat',mStream); memo2.Lines.LoadFromStream(mStream); mStream.free; end; Klaus |
Re: Verschlüsselung einer CSV Datenbank Klappt nicht ganz
Boar wie geil es Funktioniert ihr seid Götlich vielen Dank :dp:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:16 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