Einfach Text verschlüsseln
Manchmal möchte man bestimmte Texte unleserlich machen. Dafür eignet sich eine xor-Verschlüsselung. Diese Verschlüsselung ist ist nicht sicher(mit einem Computer in Sekundenbruchteilen knackbar) und eignet sich daher nicht zum Verschlüsseln vertraulicher Daten, sondern ausschließlich dafür, den Text unleserlich zu machen. Die folgende Funktion implementiert eine solche xor-Verschlüsselung:
uses Math; function XorStr(const Text: string; Key: Integer): string; var i: Integer; begin SetLength(Result, Length(Text)); if not (Key in [0..31]) then raise EInvalidArgument.CreateFmt('Key muss ein Integer zwischen 0 und 31 sein, ist aber %d', [Key]); for i:=1 to Length(Text) do begin if Text[i] > #31 then Result[i] := Chr(Ord(Text[i]) xor Key) else Result[i] := Text[i]; end; end;
Aufruf:
procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Text := XorStr(Memo1.Text, 21); end;
Als Schlüssel darf eine beliebige Zahl zwischen 1
und 31
verwendet werden. verschlüsselt nicht und alle Schlüssel größer
31
, ebenso negative Schlüssel sind potentiell problematisch, da dadurch nicht-druckbare Zeichen entstehen können.
Das Prinzip dieser Verschlüsselung ist ganz einfach: Es werden alle Zeichen durchgegangen und dabei alle nicht druckbaren Zeichen überlesen(if Text[i] > #31 then
). Die Funktion Ord()
bestimmt den ASCII-Wert des Zeichens. Dann wird dieses mit xor „verschlüsselt“ und Chr()
macht daraus wieder ein Char.
Funktionsweise von xor
xor
ist eine Bit-Operation, d.h. sie wirkt auf Bit-Ebene. Dabei werden die einzelnen Bits separat betrachtet und ein boolsches xor darauf angewendet, d.h. das Ergebnis 1
, falls die zwei jeweils betrachteten Bits unterschiedlich sind, sonst . Beispiel:
10110110 xor 01011101 ------------ 11101011
Um nun wieder die ursprüngliche Bitfolge zu erhalten, wendet man einfach das Verfahren nochmals an:
11101011 xor 01011101 ------------ 10110110
Deshalb kann die oben genannte Funktion gleichermaßen zum Ver- und Entschlüsseln verwendet werden.