====== Шифрация строк с помощью 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. Расшифровать такую строку будет значительно сложнее.