Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Verschlüsselung einer CSV Datenbank Klappt nicht ganz (https://www.delphipraxis.net/133770-verschluesselung-einer-csv-datenbank-klappt-nicht-ganz.html)

5etH 8. Mai 2009 09:53


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:
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;
er bricht dann irgendwann ab, wobei die Datenmenge nicht groß ist (3 KB)

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:

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 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.

Ich hoffe das ich es einigermaßen gut beschrieben hab ansonsten werde ich den Post nochmal editieren falls Unklarheiten vorhanden sein sollten.

Gruß
Manu

Klaus01 8. Mai 2009 10:02

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

5etH 8. Mai 2009 10:15

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.

Klaus01 8. Mai 2009 10:19

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

5etH 8. Mai 2009 10:28

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

Klaus01 8. Mai 2009 10:56

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:
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;
.. ist allerdings ungetestet

Grüße
Klaus

5etH 8. Mai 2009 11:25

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:
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;
habe ich da was falsch gemacht oder kann RCx das einfach nicht ?

gruß
Manu

Klaus01 8. Mai 2009 11:40

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:
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;
Grüße
Klaus

5etH 8. Mai 2009 12:02

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

Blup 8. Mai 2009 12:27

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 09:17 Uhr.
Seite 1 von 2  1 2      

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