Da es scheinbar nicht zwingend darum geht, ein Memofeld zu sortieren, sondern einen Eintrag in der INI-Datei zu verstecken...
MKinzler hat es schon geschrieben, dass es dafür fertige Verschlüsselungsverfahren gibt. Um INI-Einträge vor "normalen" neugierigen Benutzern zu schützen, hatte ich schon länger eine einfachen 8-Bit Verschlüsselung gebastelt. Dies ist natürlich überhaupt nicht sicher, gegen erfahrene Angriffe. Aber schützt wirksam vor neugierigen Otto-Normal-PC-Anwendern
Der übergebene String kann auch Memo.Text sein, da Sonderzeichen wie Linefeed, Tab oder Return kein Problem sind. Der "verschlüsselte" Text wird als Hex-String ausgegeben, damit ein speichern in einer INI-Datei kein Problem ist.
Delphi-Quellcode:
function StrToCryptHex(Text: String; XorVal : Byte): String;
var
i, Count : Integer;
b : Byte;
begin
Count := Length(Text);
Result := '';
for i := 1 to Count do begin
b := Ord(Text[i]);
XorVal := b XOR XorVal;
Result := Result + IntToHex(XorVal, 2);
end;
end;
function CryptHexToStr(Text: String; XorVal : Byte): String;
var
i, Count : Integer;
b : Byte;
begin
Count := Length(Text) div 2;
Result := '';
for i := 0 to Count-1 do begin
b := StrToInt('$'+Copy(Text, i*2+1, 2));
XorVal := b XOR XorVal;
Result := Result + Chr(XorVal);
XorVal := b;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
const
XorVal = $AA; // beliebiger Bytewert
var
AString : String;
begin
AString := 'Dieser Text wird für normale PC-Anwender versteckt.';
// Testanzeige
ListBox1.Items.Add(AString);
// "Verschlüsseln"
AString := StrToCryptHex(AString, $AA);
// Ergebnis
ListBox1.Items.Add(AString);
// "Entschlüsseln"
AString := CryptHexToStr(AString, $AA);
// Ursprung wieder hergestellt
ListBox1.Items.Add(AString);
end;