![]() |
Mit dem RC-Stromdekorierer INIs verschlüsseln
Mit dem RC-Stromdekorierer INIs verschlüsseln
betreff: ![]() Kürzlich erhielt ich dazu folgende frage... Zitat:
Die antwort: Hallo jolomino, normalerweise wäre dein vorhaben nicht möglich, da TIniFile kein stream ist. Der dekorator braucht aber nunmal ein stream, den er umschliessen kann. Allerdings gibt es die klasse TMemIniFile, welche für das speichern Stringlisten verwendet, die man dann verschlüsseln kann. Also machen wir eine neue klasse. Allerdings müssen dafür einige methoden ersetzt werden. LoadValue zb. ist nicht virtuell und kann daher nicht überschrieben werden, also Kann man einfach die stellen ersetzen wo loadValue aufgerufen wird und dann das neue LoadValue aufrufen. In demfall müssen also Create und Rename ersetzwerden. UpdateFile ist virtuell und kann überschrieben werden, ohne es zu vererben. WICHTIG: die RCx klasse von hagen wird auch benötigt. Also hier die klasse:
Delphi-Quellcode:
Musst halt nur updateFile selbst aufrufen! Aber ansonsten hast du somit eine verschlüsselte ini-Datei. Wenn du willst kannst du unit auch gerne in der codeLib veröffentlichen, damit vielleicht auch andere was davon haben.// RCx inifile unit. // written by maximov (max hue) 2005. // Inspiration by Jolomino. // free for all, without warrenty. // 12.04.2005 - fixes unit RCmxIni; interface uses inifiles; type TRCxIniFile = class(TMemIniFile) private FFileName:string; FPassword:string; procedure LoadValues; protected public constructor Create(const FileName, PassWord: string); procedure UpdateFile; override; procedure Rename(const FileName: string; Reload: Boolean); destructor Destroy; override; end; implementation uses classes, RCStreamDeco, sysUtils; constructor TRCxIniFile.Create(const FileName, PassWord: string); begin FFileName := FileName; FPassWord := PassWord; // instance sauber erzeugen, aber durch '' keine values laden inherited Create(''); // neues loadValue eingeführt, mit RCx LoadValues; end; destructor TRCxIniFile.Destroy; begin FPassword := ''; inherited; end; procedure TRCxIniFile.Rename(const FileName: string; Reload: Boolean); begin FFileName := FileName; if Reload then LoadValues; end; procedure TRCxIniFile.LoadValues; var List: TStringList; rcxStream:TRCxStreamDecorator; begin if (FFileName <> '') and FileExists(FFileName) then begin List := TStringList.Create; try // Filestream, von RCx-dekorierer gewrappt, erzeugen. rcxStream := TRCxStreamDecorator.Create( TFileStream.Create(FFileName, fmOpenRead or fmShareDenyNone), true, FPassword); try // salz lesen -> zur besseren sicherheit rcxStream.ReadSalt; // entschlüsselnd laden List.LoadFromStream(rcxStream); SetStrings(List); finally rcxStream.Free; end; finally List.Free; end; end else Clear; end; procedure TRCxIniFile.UpdateFile; var List: TStringList; rcxStream:TRCxStreamDecorator; begin List := TStringList.Create; try // stream erzeugen. rcxStream := TRCxStreamDecorator.Create( TFileStream.Create(FFileName, fmCreate), true, FPassword); try GetStrings(List); // salz mit zufälliger länge schreiben -> erhöht die sicherheit rcxStream.WriteSalt(16 + random(32)); List.SaveToStream(rcxStream); finally rcxStream.Free; end; finally List.Free; end; end; end. Viel spass damit und wenn fragen sind, immer her damit. grüsse maximov. Edit: Kleine verbesserungen von Hagen eingebaut. Danke! [edit=Chakotay1308]SID aus Link entfernt. Mfg, Chakotay1308[/edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:12 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-2025 by Thomas Breitkreuz