program CryptDemo_7;
(****************************)
(*Шифрование строки текста заменой части символов.*)
(* Turbo Pascal 3.xx	*)
(****************************)
const
TestTxt1 = ?Мама мыла Машу мылом. Маша мыло не любила. ?#10;
TestTxt2 = ?Шифрование заменой символов.?;
var
I : byte;
C : char;
Line : string [$FF];
ShiftTab : array [1..255] of byte;
(*—————————————————————————————————————-*)
procedure ChangeCharNum (var C : char);
(************************)
(* Смена номера символа *)
(************************)
begin
case C of
#007..#010:	C	:=	Chr (Ord (C) + 243);
#013 :	C	:=	#254;
#026 :	C	:=	#255;
#250..#253:	C	:=	Chr (Ord (C) - 243);
#254 :	C	:=	#013;
#255 :	C	:=	#026
end;
Exit
end; (* ChangeCharNum *)
(*—————————————————————————————————————-*)
begin
TextBackGround (Black);
(* шифруемый текст *)
Line := TestTxt1 + TestTxt2;
TextColor (Yellow);
WriteLn (Line);
(* рандомизация ключа шифрования *)
Randomize;
(* подготовка таблицы сдвигов *)
for I := 1 to Length (Line) do
ShiftTab [I] := Random (250);
(* шифрование заменой символов *)
for I := 1 to Length (Line) do begin
ChangeCharNum (Line [I]);
if Line [I] < #250 then
Line [I] := Chr ((Ord (Line [I]) + 250 - ShiftTab [I]) mod 
250);
ChangeCharNum (Line [I]) end;
TextColor (LightCyan);
WriteLn (Line);
(* дешифрирование замены символов *)
for I := 1 to Length (Line) do begin
ChangeCharNum (Line [I]);
if Line [I] < #250 then
Line [I] := Chr ((Ord (Line [I]) + ShiftTab [I]) mod 250);
ChangeCharNum (Line [I]) end;
TextColor (White);
Write (Line);
TextColor (LightGray);
WriteLn;
Halt
end. (* CryptDemo_7 *)
336