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