Registriert seit: 3. Sep 2004
4.629 Beiträge
Delphi 10.2 Tokyo Starter
|
Re: Verschlüsselte Ini lesen?
27. Jan 2008, 13:41
Ich war mal so nett. Den MemoryStream hätte man zwar gar nicht gebraucht, weil man auch direkt hätte die StringList zum Laden verwenden können, aber ich war zu faul das wieder umzuschreiben: Okay doch noch schnell den MemoryStream rausgenommen
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE}
uses
Windows, SysUtils, IniFiles, Classes;
procedure XORMem(Data: Pointer; Len: Int64);
var
I: Cardinal;
begin
for I := 0 to Len do
begin
PByte(Cardinal(Data) + I)^ := 23 xor PByte(Cardinal(Data) + I)^;
end;
end;
var
Ini: TMemIniFile;
Lines: TStringList;
S: String;
begin
Lines := TStringList.Create;
try
// Datei laden und entschlüsseln, fals schon angelegt
if FileExists(ExtractFilePath(ParamStr(0)) + 'test.ini') then
begin
Lines.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'test.ini');
S := Lines.Text;
XORMem(@S[1], Length(S));
Lines.Text := S;
end;
// Diese Datei landet nie auf der Festplatte
Ini := TMemIniFile.Create(ExtractFilePath(ParamStr(0)) + 'test.tmp');
try
Ini.SetStrings(Lines);
// Hier kann ganz normal mit der Ini gearbeitet werden
WriteLn(Ini.ReadString('Test', 'TestVal', 'not exists'));
Ini.WriteString('Test', 'TestVal', 'working!');
ReadLn;
// Hier wird die Ini Datei verschlüsselt gespeichert
Lines.Text := '';
Ini.GetStrings(Lines);
S := Lines.Text;
XORMem(@S[1], Length(S));
Lines.Text := S;
Lines.SaveToFile(ExtractFilePath(ParamStr(0)) + 'test.ini');
finally
Ini.Free;
end;
finally
Lines.Free;
end;
end.
|
|
Zitat
|