![]() |
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:04 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