Home » Tipps & Tricks » Algorithmen » Verschlüsselungen » Einfach Text verschlüsseln

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.