Как изменить тип ключа в шифре цезаря с числового на буквенный(Ключове слово), в данной программе - Pascal

Узнай цену своей работы

Формулировка задачи:

К примеру если я введу: ключ: AAB строку: SIFRUJI SIFRU зашифрованный текст получится: TJHSVLJ TKGSW
const CKey = 3;
 
function Encrypt(arg: char): char;
var x: integer;
begin
x:= Ord(arg)+ CKey;
if x>255 then x:= x-256+32;
Encrypt:= Chr(x);
end;
 
function Decrypt(arg: char): char;
var x: integer;
begin
x:= Ord(arg)- CKey;
if x<32 then x:= x+256-32;
Decrypt:= Chr(x);
end;
 
procedure EncryptStr(var arg: string);
var k: integer;
begin
for k:=1 to Length(arg) do
arg[k]:= Encrypt(arg[k]);
end;
 
procedure DecryptStr(var arg: string);
var k: integer;
begin
for k:=1 to Length(arg) do
arg[k]:= Decrypt(arg[k]);
end;
 
var S: string;
Oper: integer;
begin
repeat
Write('Введите строку: '); Readln(S);
Writeln('Укажите операцию: 1– шифровать,’+’ 2– расшифровать,’+’ Прочие – выход');
Readln(Oper);
case Oper of
1: EncryptStr(S);
2: DecryptStr(S);
else Break;
end;
Writeln(S); 
until false;
end.

Решение задачи: «Как изменить тип ключа в шифре цезаря с числового на буквенный(Ключове слово), в данной программе»

textual
Листинг программы
const
  C = 64;
 
var
  S, key: string;
  Oper: integer;
 
function charCrypt(arg: char; z: byte): char;
var
  x: integer;
begin
  case Oper of
    1: x := Ord(arg) + Ord(key[z]) - c;
    2: x := Ord(arg) - Ord(key[z]) + c;      
  end;
  charCrypt := Chr(x);
end;
 
procedure Crypto(var arg: string);
var
  k, ik: integer;
begin
  ik := 1;
  for k := 1 to Length(arg) do
    case arg[k] of 
      #65..#90:
        begin
          arg[k] := charCrypt(arg[k], (ik - 1) mod length(key) + 1 );
          ik := ik + 1;
        end;
    else  arg[k] := s[k];
    end;   
end;
 
begin
  repeat
    Write('Введите строку: ');Readln(S);
    Write('Введите ключ: ');Readln(key);
    Writeln('Укажите операцию: 1– шифровать,  2– расшифровать, Прочие – выход');
    Readln(Oper);
    case Oper of
      1, 2: Crypto(S);
    else Break;
    end;
    Writeln(S); 
  until true;
end.

Объяснение кода листинга программы

  1. В начале кода объявляются необходимые переменные: C (константа), S и key (строки), Oper (целое число), x (целое число), arg (строка), k (целое число), ik (целое число).
  2. В функции charCrypt(arg: char; z: byte) происходит преобразование символа в числовое значение по его коду (Ord), затем прибавляется или вычитается из него код ключа (key[z]), после чего результат преобразуется обратно в символ с помощью функции Chr.
  3. В процедуре Crypto(var arg: string) происходит шифрование каждого символа строки arg с помощью функции charCrypt. Если символ является числом от 65 до 90, то он заменяется на результат применения операции к этому символу. Если символ не является числом, то он остается без изменений. Для каждого символа увеличивается счетчик ik.
  4. В основной части программы пользователю предлагается ввести строку и ключ, а также выбрать операцию. Затем программа проверяет выбранную операцию и вызывает соответствующую процедуру Crypto. После обработки всех символов выводится исходная строка.
  5. Программа завершается, когда пользователь выбирает выход.

Оцени полезность:

12   голосов , оценка 4 из 5
Похожие ответы