Шифрация строк с помощью XOR

Автор: mr._t

Хочу представить вашему вниманию пару функций которые шифруют строки наложением маски XOR.

Начнём с самой простой:

function Crypt1(s:string;ch:Char):String;
var
i:Integer;
substr:String;
begin
setlength(substr,length(s));//устанавливаем длину побочной строки равную длине исходной строки
 for i:=1 to length(s) do
  substr[i]:=chr(ord(s[i]) xor ord(ch));//само наложение
Result:=substr;
end;

Здесь для того чтобы получить исходную строку нужно применить эту функцию снова, с тем же символом ch. Это и является существенным недостатком этого метода. Т.е. если перебирать значения ch, то рано или поздно строка нам откроется.

Следующая функция является усовершенствованием первой:

function Crypt2(s,gamma:String):String;
var
i,n:Integer;
substr:String;
begin
SetLength(substr,length(s));//устанавливаем длину побочной строки равную длине исходной строки
n:=0;
 for i:=1 to length(s) do
  begin
   if n>length(gamma) then n:=1 else n:=n+1;
   substr[i]:=chr(ord(s[i]) xor ord(gamma[n]));
  end;
Result:=substr;
end;

Здесь каждому символу строки s соответствует определённый символ стоки gamma. Расшифровать такую строку будет значительно сложнее.