ich glaub langsam lern ich auch noch die knuffigen Class-Helper lieben
Delphi-Quellcode:
Uses EncryptedStringLists;
Var SL: TStringList;
SL.LoadFromFile('name.txt', 'pass');
Memo1.Lines.SaveToFile('name.txt', 'pass');
und sobald man diese
Unit in seine Uses-Liste aufgenommen hat, sind bei allen Nachfahren von TStrings die Funktionen LoadFromFile, SaveToFile, LoadFromStream und SaveToStream mit einer neue Version überladen, wo man einfach nur noch das Passwort anzugeben baucht

(das sllte so ab D2006/TDE möglich sein, oder ab wann die Class-Helper halt eingeführt wurden)
nur gibt es ein Problem ...
der Class-Helper selber sollte so doch OK sein (zumindestens nach maximovs Beispielen) ... denk ich mal
aber dennoch gibt es einen Decodierfehler, beim Einlesen der Datei
mein TestCode
Delphi-Quellcode:
Memo1.Lines.SaveToFile('name.txt', 'pass');
Memo1.Lines.Clear;
Memo1.Lines.LoadFromFile('name.txt', 'pass');
und wenn ich es Debugge, dann steht in CRC vorm
PS:
Delphi-Quellcode:
// RCStreamDeco.pas
procedure ProtectString(var Value: String);
begin
FillChar(Pointer(Value)^, Length(Value), 0);
end;
ist nicht unicodetauglich
hier die nötigen Änderungen:
Delphi-Quellcode:
procedure ProtectString(var Value: String);
FillChar(Pointer(Value)^, Length(Value) * SizeOf(Char), 0);
procedure TRCxStreamDecorator.WriteSalt(Size: Byte = 16);
WriteBuffer(Pointer(Salt)^, Size * SizeOf(Char));
procedure TRCxStreamDecorator.ReadSalt;
ReadBuffer(Pointer(Salt)^, Size * SizeOf(Char));
Aber das hilft auch nun nicht wirklich weiter, denn alleine ReadSalt ließt schon was anderes ein, als WriteSalt geschrieben hat und bricht dann natürlich mit der EInvalidDecryption ab.
[add]
hab mich nochmal rangesetzt und konnte nun den Fehler nahezu eindeutig in Hagens RCx-
Unit ausmachen

Denn nach nachfolgenden Änderungen funktioniert der Streamdecodierer und mein Code fehlerfrei.
Gut, abgesehn davon, daß die Daten nun unverschlüsselt durchgereicht wurden.
Und es ist kein D2009 Problem, auch mit D2006 ging es nicht.
Delphi-Quellcode:
function TRCStreamDecorator.Read(var Buffer; Count: Integer): Integer;
begin
result := FStream.Read(Buffer, count);
// case EncodeMode of
// emEncodeWriting: Decode(Buffer, Buffer, Result); // abstrakter aufruf
// emEncodeReading: Encode(Buffer, Buffer, Result); // abstrakter aufruf
// end;
end;
function TRCStreamDecorator.Write(const Buffer; Count: Integer): Integer;
var
temp:pointer;
begin
GetMem(temp, count);
// case EncodeMode of
// emEncodeWriting: Encode(Buffer, temp^, Count); // abstrakter aufruf
// emEncodeReading: Decode(Buffer, temp^, Count); // abstrakter aufruf
// end;
result := FStream.Write(Buffer{temp^}, count);
FreeMem(temp, count);
end;
OK und nach einigen Änderung (siehe Anhangt ... die paar SizeOf(Char) darin und ich hoff mal ich habe soweit alles gefunden) läuft es nun auch in D2009 richtig
(allerdings sind die mit D2009 verschlüsselten Dateien nicht kompatibel mit Dateien älterer Compiler und umgekehrt)
[edit]
ein winziges
Leerzeichen entfernt
Ein Therapeut entspricht 1024 Gigapeut.