AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Verschlüsselte Ini lesen?

Ein Thema von Poring · begonnen am 27. Jan 2008 · letzter Beitrag vom 27. Jan 2008
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#11

Re: Verschlüsselte Ini lesen?

  Alt 27. Jan 2008, 12: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.
  Mit Zitat antworten Zitat
Poring

Registriert seit: 7. Nov 2007
104 Beiträge
 
#12

Re: Verschlüsselte Ini lesen?

  Alt 27. Jan 2008, 12:45
Bei:
Delphi-Quellcode:

      WriteLn(Ini.ReadString('Test', 'TestVal', 'not exists'));
      Ini.WriteString('Test', 'TestVal', 'working!');
Müssen für Test etc. die Objekte hin die in der Ini [Name] Eintrag1=Test sind oder dies wo oben steht?

edit:
Danke für die Erklärungen
Aber: Die Inidatei liegt schon verschlüsselt vor, an ihr wird auch nichts geändert. Ich lese sie nur aus. Würde dies dann so aussehn?:

Delphi-Quellcode:
// Hier kann ganz normal mit der Ini gearbeitet werden
      i:=ini.ReadString('Name', 'Eintrag1', '');
      label2.caption:=i;
      ReadLn;
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#13

Re: Verschlüsselte Ini lesen?

  Alt 27. Jan 2008, 12:50
Arbeite einfach ganz normal mit der Datei. Wie ohne Verschlüsselung. Der erste Parameter, also "Test" ist das was hinterher in eckigen Klammern steht. Der zweite Parameter ist der Name des Eintrags, also das war vor dem = steht. Der dritte Parameter beim LESEN ist der Wert der zurückgegeben wird, wenn der Eintrag nicht existiert. Beim SCHREIBEN ist der dritte Wert der Wert welcher in die Ini Datei geschrieben wird.

Startest du das Programm zum ersten mal wird "not exists" ausgegeben, weil die Ini ja noch nicht existiert. Gleichzeitig wird der neue Wert "working!" eingetragen, weshalb dieser auch beim zweiten Programmstart ausgegeben wird. Auch kannst du im selben Verzeichnis eine Datei "test.ini" bewundern, welche mit deiner XOR Verschlüsselung behandelt wurde.

Bei der Verschlüsselung würde ich allerdings eher etwas stärkere Algorithmen bevorzugen.
  Mit Zitat antworten Zitat
Poring

Registriert seit: 7. Nov 2007
104 Beiträge
 
#14

Re: Verschlüsselte Ini lesen?

  Alt 27. Jan 2008, 12:53
Da ich das Schreiben nicht benötige, wäre dies dann der Code?

Delphi-Quellcode:
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 - heir etwas geändert
      i:=ini.ReadString('Name', 'Eintrag1', '');
      label2.caption:=i;
      ReadLn;
      // speichern entfernt
    finally
      Ini.Free;
    end;
  finally
    Lines.Free;
  end;
end.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#15

Re: Verschlüsselte Ini lesen?

  Alt 27. Jan 2008, 12:57
Ja so kannst du es verwenden. Warum willst du denn nichts speichern mit der Ini? Bzw woher stammt die Ini aus der du lesen willst?
  Mit Zitat antworten Zitat
Poring

Registriert seit: 7. Nov 2007
104 Beiträge
 
#16

Re: Verschlüsselte Ini lesen?

  Alt 27. Jan 2008, 13:00
Ok, vielen vielen dank
Ich werde es gleich mal ausprobieren, wenn noch was schief läuft kann ich ja sicherlich fragen

Die Ini habe ich so schon erstellt. Es dient dazu, das er eigentlich alle Daten die benötigt werden aus der Ini gelesen werden. Dadurch muss bei einer änderung nur die Ini geändert werden und nichtmehr die ganze exe.

Mfg
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#17

Re: Verschlüsselte Ini lesen?

  Alt 27. Jan 2008, 13:16
Die XORMem verschlüsselt / entschlüsselt die Datei nach deinem XOR Verfahren. Hatte das nur erst für MemoryStreams umgeschrieben, funktioniert aber auch mit den Strings.

Den Code unter der XORMem Funktion musst du halt dort aufrufen wo du die Daten auslesen willst. Z.b. in einem Button OnClick oder im OnCreate Ereigniss des Formulars.

[Edit: Rote Box Eh ja klar kannst gerne nachfragen. Du musst halt meinen Code zum speichern dann allerdings ja trotzdem verwenden, wenn du die Ini Datei ändern willst]
  Mit Zitat antworten Zitat
Poring

Registriert seit: 7. Nov 2007
104 Beiträge
 
#18

Re: Verschlüsselte Ini lesen?

  Alt 27. Jan 2008, 13:26
Dankeschön! Klappt besser als ichs erhofft hatte (also 110% )

Ja das mit dem XORM etc. hatte ich auch nun gemerkt wo das hinmuss bzw das es hinmuss als ich den Code einfügt

Herzlichen dank, so schnell hätte ich das niemals hinbekommen
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#19

Re: Verschlüsselte Ini lesen?

  Alt 27. Jan 2008, 13:28
Bitte bitte kein Problem
  Mit Zitat antworten Zitat
Poring

Registriert seit: 7. Nov 2007
104 Beiträge
 
#20

Re: Verschlüsselte Ini lesen?

  Alt 27. Jan 2008, 13:39
Oki eine letzte Frage habe ich nun doch noch:
Ich habe den ganzen Code in Form.OnShow
Gibt es nun eine möglichkeit auf die Ini zuzugreifen wenn ich auf einen Button klicke oder muss ich den gesamten Code dort wieder einfügen?

edit:
Da wenn ich den Code in den ButtonClick erneut rein stelle, und ganz schnell auf den Button klicke gibt es Codeübersetzungsfehler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:47 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