Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Strings kodiert in ini-Datei (https://www.delphipraxis.net/164962-strings-kodiert-ini-datei.html)

marcibaer 7. Dez 2011 19:00

Strings kodiert in ini-Datei
 
Hallo zusammen!

Zum Kodieren von Strings habe ich bisher immer so was wie
Delphi-Quellcode:
  Eintrag[i] := CHR(Ord(Eintrag[i]) XOR Werte[i]);
benutzt, was auch soweit gut klappt.
Beim Speichern von derart kodierten Strings in winer ini-Datei hatte ich
aber schon mehrmals Probleme - so wird z.B. ein Space-Zeichen am Anfang
oder Ende beim Einlesen der ini-Datei "verschluckt" bzw bei einem #0 wird
der String halt beim Einlesen beendet.
Gibt es Möglichkeiten, solche Probleme von Vornherein auszuschließen?!
Muß ich eine andere Kodierungsart wählen?

Vielen Dank für Eure Hilfe!

himitsu 7. Dez 2011 19:10

AW: Strings kodiert in ini-Datei
 
Dann mußt du es eben so kodieren verschlüsseln, daß solche Zeichenkonstellationen nicht entstehen?

XOR alleine ist aber nicht wirklich für sowas geeignet, da man nicht direkt auf solche Probleme eingehen kann, um ein bestimmtes ausgabeformat zu erziehlen.




Oder du kodierst es eben, nach der Verschlüsselung, in einem Format, welches keine Probleme bereitet.

HEX, Base64 usw.

Möglich wäre auch
XOR über den Text, dann die Bytes halbieren und jeweils als untere 4 Bit z.B. zusammen mit einem "OR $60" abspeichern

marcibaer 8. Dez 2011 11:24

AW: Strings kodiert in ini-Datei
 
Hab's mit HEX probiert ... klappt soweit gut ...

Vielen Dank für die Hilfe!

Bummi 8. Dez 2011 11:42

AW: Strings kodiert in ini-Datei
 
Hier wäre noch eine Möglichkeit


Delphi-Quellcode:

Procedure LoadMemIniFileCrypted(INI: TMemInifile; const fn: String;
  Key: String);
var
  s: String;
  sl: TStringList;
  st: TStringStream;
  RC4Reader: TRC4StreamReader;
begin
  if not FileExists(fn) then
    Exit;
  sl := TStringList.Create;
  st := TStringStream.Create;
  try
    RC4Reader := TRC4StreamReader.Create(TFileStream.Create(fn, fmOpenRead or fmShareDenyWrite), Key);
    try
      st.CopyFrom(RC4Reader, RC4Reader.Size);
      st.Position := 0;
      s := st.ReadString(st.Size);
      sl.Text := s;
      INI.SetStrings(sl);
    finally
      RC4Reader.Free;
    end;
  finally
    st.Free;
    sl.Free;
  end;
end;

Procedure SaveMemIniFileCrpyted(INI: TMemInifile; const fn: String;
  Key: String);
var
  s: String;
  sl: TStringList;
  st: TStringStream;
  fs: TFileStream;
  RC4Writer: TRC4StreamWriter;
begin
  sl := TStringList.Create;
  st := TStringStream.Create;
  try
    INI.GetStrings(sl);
    s := sl.Text;
    st.WriteString(s);
    st.Position := 0;
    RC4Writer := TRC4StreamWriter.Create(TFileStream.Create(fn, fmCreate or fmShareDenyWrite), Key);
    try
      RC4Writer.CopyFrom(st, st.Size);
    finally
      RC4Writer.Free;
    end;
  finally
    st.Free;
    sl.Free;
  end;
end;
verwendet http://www.delphi-forum.de/viewtopic...&highlight=rc4


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:17 Uhr.

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