Автор: 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. Расшифровать такую строку будет значительно сложнее.