Шифрование методом цезаря — Pascal(Паскаль) | Python(Питон)

Шифр Цезаря, также известный как шифр сдвига, код Цезаря или сдвиг Цезаря — один из самых простых и наиболее широко известных методов шифрования.

Шифр Цезаря — это вид шифра подстановки, в котором каждый символ в открытом тексте заменяется символом, находящимся на некотором постоянном числе позиций левее или правее него в алфавите.

Например, в шифре со сдвигом вправо на 3, А была бы заменена на Г, Б станет Д, и так далее.

Шифр назван в честь римского полководца Гая Юлия Цезаря, использовавшего его для секретной переписки со своими генералами.

Шаг шифрования, выполняемый шифром Цезаря, часто включается как часть более сложных схем, таких как шифр Виженера, и всё ещё имеет современное приложение в системе ROT13. Как и все моноалфавитные шифры, шифр Цезаря легко взламывается и не имеет почти никакого применения на практике.

Программа просит ввести строку и ключ (размер сдвига). Если ключ k положителен, выполняется шифрование, если отрицателен — дешифрование.

Pascal

program caesar1;

const
  sym = 'abcdefghijklmnopqrstuvwxyz '+ 
        'ABCDEFGHIJKLMNOPQRSTUVWXYZ'+
        '01234567890.';
 
var
  s0,s1: string;
  key:integer;
procedure Encrypt(s: string;k: integer;var es:string);
var
  l,ll,i,p: integer;
  c:char;
begin
  l:=length(s); ll:=length(sym);
  es:=s;
  for i:=1 to l do begin
    c:=s[i];
    p:=pos(c,sym); p:=p+k;
    if p>ll then p:=p-ll;
    es[i]:=sym[p];
  end;
end;
procedure Decrypt(s:string;k:integer;var ds:string);
var
  l,ll,i,p:integer;
  c: char;
begin
  L:=length(s); ll:=length(sym);
  k:=1;
  ds:=s;
  for i:=1 to l do begin
    c:=s[i];
    p:=pos(c,sym)-k; if p<=0 then p:=p+ll;
    ds[i]:=sym[p];
  end;
end;
begin
  write('Input text: '); readln(s0);
  write('Input key: '); readln(key);
  if key>0 then Encrypt(s0,key,s1)
  else Decrypt(s0,-key,s1);
  writeln(s1);
  readln;
end.

Python

В программе шифруется текст «A simple example.» . Ключ генерируются случайным образом

from string import printable
import random
 
EXAMPLE_KEY = ''.join(sorted(printable, key=lambda _:random.random()))
 
def encode(plaintext, key):
    return ''.join(key[printable.index(char)] for char in plaintext)
 
def decode(plaintext, key):
    return ''.join(printable[key.index(char)] for char in plaintext)
 
original = "A simple example."
encoded = encode(original, EXAMPLE_KEY)
decoded = decode(encoded, EXAMPLE_KEY)
print("""The original is: {}
Encoding it with the key: {}
Gives: {}
Decoding it by the same key gives: {}""".format(
    original, EXAMPLE_KEY, encoded, decoded))

Leave a Comment

− 3 = 4