Registriert seit: 8. Jan 2007
472 Beiträge
|
AW: AnsiString speichern und laden
14. Mär 2021, 21:50
@Willie1: Auch wenn du es nicht hören wolltest, Kryptografie ist mit den richtigen Units vernünftig umzusetzen. Nimm besser die folgenden Funktionen:
Delphi-Quellcode:
uses
SynCommons, SynCrypto, SynZip;
const
KEY_FILE_HEADER = 'TOPSECRET';
KEY_FILE_HEADER_SIZE = Length(KEY_FILE_HEADER);
function SaveToFile(const pmcRaw, pmcPassword: RawByteString; const pmcFileName: TFileName): Boolean;
begin
Result := False;
if (pmcRaw <> '')
and (pmcPassword <> '')
and (DirectoryExists(ExtractFilePath(pmcFileName))) then
begin
Result := FileFromString(KEY_FILE_HEADER + SynCrypto.AESSHA256(SynZip.CompressString(pmcRaw), pmcPassword, True), pmcFileName);
end;
end;
function LoadFromFile(const pmcFileName: TFileName; const pmcPassword: RawByteString; out pmcRaw: RawByteString): Boolean;
var
sSrc, sOut: RawByteString;
begin
Result := False;
if (pmcPassword <> '')
and FileExists(pmcFileName) then
begin
sSrc := StringFromFile(pmcFileName);
if (sSrc <> '')
and (PosEx(KEY_FILE_HEADER, sSrc, 1) = 1) then
begin
SetString(sOut, Nil, Length(sSrc) - KEY_FILE_HEADER_SIZE);
SynCrypto.AESSHA256(PAnsiChar(sSrc) + KEY_FILE_HEADER_SIZE, Pointer(sOut), Length(sOut), pmcPassword, False);
pmcRaw := SynZip.UnCompressString(sOut);
Result := (pmcRaw <> '');
end;
end;
end;
Anwenden kannst du das wie folgt:
Delphi-Quellcode:
procedure TForm1.btnSaveClick(Sender: TObject);
begin
if SaveToFile(StringToUTF8(memoTopSecret.Text), 'Willie1', ChangeFileExt(ParamStr(0), '.key')) then
memoTopSecret.Clear;
end;
procedure TForm1.btnLoadClick(Sender: TObject);
var
secStr: RawByteString;
begin
if LoadFromFile(ChangeFileExt(ParamStr(0), '.key'), 'Willie1', secStr) then
memoTopSecret.Text := UTF8ToString(secStr);
end;
Bis bald...
Thomas
|
|
Zitat
|