№ | Слайд | Текст |
1 |
 |
Шифры заменыПрограммирование алгоритмов |
2 |
 |
Шифр замены – преобразования заключаются в замене каждого символа(слова) открытого сообщения на другие символы – шифрообозначения, порядок следования шифрообозначений совпадает с порядком следования соответствующих им символов в открытом тексте. |
3 |
 |
Шифр Цезаря (замена со сдвигом)А Б В Г Д Е Ж З И Й К Л М Н О П Г Д Е Ж З И Й К Л М Н О П Р С Т Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я А Б В Каждый символ открытого текста заменяется символом, находящимся тремя символами правее в алфавите Таблица для сдвига, равного 3. |
4 |
 |
Шифр Цезаря (замена со сдвигом)Букву заменяют на ее естественный номер в алфавите Этот шифр может быть описан уравнением C=(M+K) mod N, где М - номер буквы исходного текста в алфавите, С - номер буквы зашифрованного текста в алфавите, K – ключ (число, на которое делаем смещение), N – количество букв в алфавите, mod – операция вычисления остатка от деления. |
5 |
 |
Программный код для алгоритма ЦезаряProgram cezar; var n,i,r:integer; s:string; begin writeln('vvedite stroku'); readln(s); writeln('vvedite regim: 1-shifrovanie, 2-rasshifrovanie'); readln(r); if r=1 then begin i:=1; while i<=length(s) do {убираем пробелы из открытого текста} if s[i]=‘ ' then delete(s,i,1) else i:=i+1; for i:=1 to length(s) do begin n:=ord(s[i])+3; if n>ord('z') then n:=ord('a')+n-ord('z')-1; s[i]:=chr(n); end; end else for i:=1 to length(s) do begin n:=ord(s[i])-3; if n<ord('a') then n:=ord('z')-(ord('a')-n-1); s[i]:=chr(n); end; writeln(s); end. |
6 |
 |
Шифр Виженерапредполагает выбор ключа, который рассматривают как блоковую последовательность букв, а сообщение разбивают на блоки длиной, соответствующей длине ключа. Затем выполняют операцию сложения по модулю номеров каждой буквы исходного текста с номером соответствующей буквы ключа в блоке и по полученному номеру записывают букву в зашифрованный текст. |
7 |
 |
Шифр ВиженераДля примера используем слово ФАЙЛ, состоящее из 4 букв, как ключ. Алфавитным номерам букв соответствует блок чисел 21, 1, 10, 12. Чтобы зашифровать сообщение при помощи этого ключа, исходный текст разбивается на блоки длинной в 4 буквы каждый. Затем к каждому числовому представлению первой буквы блока надо прибавить 21, к числовому представлению второй буквы – 1, третьей – 10, четвертой – 12. Получающиеся суммы по модулю представляют числовые значения шифртекста. |
8 |
 |
Шифр сложной замены-это модификация шифра Цезаря с числовым ключом. Под буквами сообщения записывают цифры числового ключа. Если ключ короче сообщения, то его запись циклически повторяют. Шифртекст получают, отсчитывая букву по алфавиту на соответствующую цифру ключа. |
9 |
 |
Полибианский квадратКвадрат или прямоугольник заполняется буквами случайным образом. При шифровании находят букву текста и заменяют ее буквой, стоящей в строке ниже ( или первой буквой в столбце). |
10 |
 |
УХ Э Н Ж Ч Е С Л К Ц Г О Р Д Щ Ф А Ь И В З Ю Й Ъ Т М Б П Ы Ш Я Пусть дан квадрат - ключ для шифра «Полибианский квадрат». Зашифровать слово «криптография» полученным ключом. Найдем в прямоугольнике первую букву слова. Выберем букву, которая стоит ниже этой буквы, и запишем ее в качестве первого символа криптограммы. Выполним аналогичные действия для всех оставшихся букв слова. Получим «азбжхвизтъбс» |
11 |
 |
Программный код для алгоритма ВиженераProgram vigener; var n,i,r:integer; s,s1,s2:string; begin writeln('vvedite stroku'); readln(s); writeln('vvedite kluch'); кeadln(s1); writeln('vvedite regim: 1-shifrovanie, 2-rasshifrovanie'); readln(r); s2:=''; for i:=1 to length(s) div length(s1)+1 do {размножаем ключ до длины текста} s2:=s2+s1; if r=1 then begin i:=1; while i<=length(s) do if s[i]=' ' then delete(s,i,1) else i:=i+1; for i:=1 to length(s) do begin n:=ord(s[i])+(ord(s2[i])-ord('a'))+1; if n>ord('z') then n:=ord('a')+(n-ord('z'))mod 26-1; s[i]:=chr(n); end; end else for i:=1 to length(s) do begin n:=ord(s[i])-(ord(s2[i])-ord('a'))-1; if n<ord('a') then n:=ord('z')-(ord('a')-n)mod 26+1; s[i]:=chr(n); end; writeln(s); end. |
12 |
 |
Программный код для алгоритма Полибианский квадратProgram polib_kvadrat; var n,i,r,j,k:integer; s,s1:string; a:array[1..5,1..5] of char; begin writeln ('vvedite rasmer kvadrata');}readln(n); writeln ('vvedite bukvi alfavita v kvadrad rasmera',' ',n); for k:=1 to n do begin for j:=1 to n do read(a[k,j]); readln; end; writeln('vvedite stroku'); readln(s); writeln('vvedite regim: 1-shifrovanie, 2-rasshifrovanie'); readln(r); s1:=''; {формируемая новая строка} if r=1 then begin i:=1; while i<=length(s) do if s[i]=' ' then delete(s,i,1) else i:=i+1; for i:=1 to length(s) do for k:=1 to n do for j:=1 to n do if s[i]=a[k,j] then if k<n then s1:=s1+a[k+1,j] else s1:=s1+a[1,j]; end else for i:=1 to length(s) do for k:=1 to n do for j:=1 to n do if s[i]=a[k,j] then if k>1 then s1:=s1+a[k-1,j] else s1:=s1+a[n,j]; writeln (s1); end. |
«Шифры замены» |