Выходными данными являются сам магический квадрат, его размер, магический квадрат из букв и шифрованный текст.
2.5 Блочные шифры простой замены (шифр Плейфера)
Описание задачи
Простейший блочный шифр оперирует с биграммными шифрвеличинами. Одними из первых таких шифров были биграммные шифры Порта и Плейфера. Приведем описание шифра Плейфера, нашедшего широкое применение в начале нашего века.
Основой шифра Плейфера является прямоугольная таблица, в которую записан систематически перемешанный алфавит (для удобства запоминания). Правило зашифрования состоит в следующем.
Буквы биграммы (i, j), i<>j (являющейся шифрвеличиной) находятся в данной таблице. При зашифровании биграмма (i, j) заменяется биграммой (k, l), где k и l определяются в соответствии с правилами 1–3.
1. Если i и j не лежат в одной строке или одном столбце, то их позиции образуют противоположные вершины прямоугольника. Тогда k и l – другая пара вершин, причем k – вершина, лежащая в той же строке, что и i.
2. Если i и j лежат в одной строке, то k и l – буквы той же строки, расположенные непосредственно справа от i и j соответственно. При этом если одна из букв – последняя в строке, то считается, что ее “правым соседом” является первая буква той же строки.
3. Аналогично, если i и j лежат в одном столбце, то они заменяются их “соседями снизу”.
Наглядно правило зашифрования можно проиллюстрировать следующим образом.
В случае 1:
… | … | |||
… |
| k | … | |
… | … | … | ||
… | l | j | … | |
… | … |
В случае 2:
I | k | .. | j | l | k | j | l | j | ||||
| ||||||||||||
В случае 3:
… | k | |||||
|
| |||||
k | j | |||||
… | … | … | … | l | … | |
| … | |||||
l | ||||||
… | i |
При зашифровании открытый текст представляется в виде последовательности биграмм. Если текст имеет нечетную длину или содержит биграмму, состоящую из одинаковых букв, то в него добавляются “пустышки” следующим образом. “Пустышкой” является некоторая редкая для данного типа текста буква (или знак), которая вставляется между одинаковыми буквами биграммы или добавляется в текст для того, чтобы его длина стала четной. Такие изменения открытого текста, как правило, не мешают при расшифровании. Проиллюстрируем сказанное следующим примером.
Пусть шифр использует прямоугольник размером 5 x 6, в который записан систематически перемешанный русский 30 буквенный алфавит на основе ключевого слова командир:
к | о | м | а | н | д |
и | р | б | в | г | е |
ж | з | л | п | с | т |
у | ф | х | ц | ч | ш |
щ | ь | ы | э | ю | я |
Зашифруем фразу “автором метода является Уитстон”. В качестве “пустышки” будем использовать редкую букву ф.
Представим фразу в виде последовательности биграмм:
АВ ТО РО МФ МЕ ТО ДА ЯВ ЛЯ ЕТ ТЯ УИ ТС ТО НФ
(Нам пришлось дважды вставить “пустышку”.)
В соответствии со сформулированными правилами получаем шифртекст:
ВП ЗД ЗР ОХ ДБ ЗД КН ЭЕ ТЫ ТШ ТЮ ЩЖ ЖТ ЗД ОЧ
или без пробелов
впздзрохдбздкнэетытштющжжтздоч
Криптоанализ шифра Плейфера опирается на частотный анализ биграмм, триграмм и четырехграмм шифртекста и особенности замены шифрвеличин на шифробозначения, связанные с расположением алфавита в прямоугольнике. При этом существенную информацию о заменах дает знание того, что используется систематически перемешанный алфавит.
Описание логической структуры
Для шифрования текста методом Плейфера, выполним следующие действия:
- водим 30 буквенный алфавит, ключ и шифрованный текст;
- вычисляем количество знаков в ключе;
- убираем буквы в алфавите, которые встречаются в ключе;
- создаем перемешанный буквенный алфавит на основе ключевого слова;
- перемешанный буквенный алфавит распределяем в массив;
- вычисляем кол-во знаков в шифруемом тексте;
- представим фразу в виде последовательности биграмм;
- разбиваем текст на массив;
- шифруем методом Плейфера;
- выводим перемешанный алфавит, текст в виде последовательности биграмм, шифр текст и шифр текст без пробелов.


Объекты CODEPLAPHER.FRM и значения их свойств | |||
Тип и номер1 | Свойство | Значение | |
Form | |||
Name | frmCodePlapher | ||
BorderStyle | 4 – Fixed ToolWindows | ||
Caption | Шифр Плейфера | ||
MaxButton | 0 – False | ||
MDIChild | -1 – True | ||
MinButton | 0 – False | ||
ShowInTaskbar | 0 – False | ||
Label | |||
1 | Name | lblTitle | |
Alignment | 2 – Center | ||
Caption | БЛОЧНЫЕ ШИФРЫ ПРОСТОЙ ЗАМЕНЫ шифр Плейфера) | ||
Font | |||
Underline | -1 – True | ||
Label | |||
2 | Name | lblEntrance | |
Caption | 1. Введите шифруемый текс: | ||
Font | |||
Underline | -1 – True | ||
TextBox | |||
3 | Name | txtEntrance | |
Alignment | 2-Center | ||
Font | |||
Name | Courier New | ||
Label | |||
4 | Name | lblKey | |
Caption | 2. Введите ключ (буквы не должны повторятся) | ||
Font | |||
Underline | -1 – True | ||
TextBox | |||
5 | Name | txtKey | |
Alignment | 2-Center | ||
Font | |||
Name | Courier New | ||
CommandButton | |||
6 | Name | cmdCodePlapher | |
Caption | Шифр Плейфера | ||
TextBox | |||
7 | Name | txtAlphabetInArray | |
Font | |||
Name | Courier New | ||
MultiLine | -1 – True | ||
Label | |||
8 | Name | lblBigramma | |
Caption | Представление фразы в виде последовательности биграмм: | ||
Font | |||
Underline | -1 – True | ||
TextBox | |||
9 | Name | txtBigramma | |
Alignment | 2-Center | ||
Font | |||
Name | Courier New | ||
Label | |||
10 | Name | lblCodePlapher | |
Caption | Полученный шифртекст | ||
Font | |||
Underline | -1 – True | ||
TextBox | |||
11 | Name | txtCodePlapher | |
Alignment | 2-Center | ||
Font | |||
Name | Courier New | ||
Label | |||
12 | Name | lblCodePlapher1 | |
Caption | Или без пробелов | ||
Font | |||
Underline | -1 – True | ||
TextBox | |||
13 | Name | txtCodePlapher1 | |
Alignment | 2-Center | ||
Font | |||
Name | Courier New | ||
1 Номер указанный в первой колонке, соответствует порядковому номеру объекта на форме (рис. ) | |||
Исходный код CODEPLAPHAR.FRM |
Option Explicit Private Sub cmdCodePlapher_Click() 'Описываем переменные Dim Alphabet As String 'Алфавит Dim Key As String 'Ключевое слово Dim AlphabetInArray() As String 'Алфавит в массиве Dim TextAsBigramm As String 'Текст в виде последовательности биграмм Dim TextAsBigrammInArray() As String 'Текст в массиве Dim MarksInKey As Integer 'Число знаков в ключе Dim MarksInText As Integer 'Число знаков в тексте Dim EntranceText As String 'Шифруемый текст Dim CodePlapher() As String 'Шифрованный текст Dim Text$, A$, B$ Dim x%, i%, j%, s1%, s2%, t1%, t2% 'Вводим 30 буквенный алфавит Alphabet = "АБВГДЕЖЗИКЛМНОПРСТУФХЦЧШЩЬЫЭЮЯ" 'Вводим ключ 'и преобразуем прописные буквы в строчные Key = StrConv(txtKey, vbUpperCase) 'Вычисляем количество знаков в ключе MarksInKey = CInt(Len(Key)) 'Проверяем, чтобы не было в ключе одинаковых букв For i = 1 To MarksInKey A = Mid(Key, i, 1) For j = i + 1 To MarksInKey B = Mid(Key, j, 1) If A = B Then MsgBox "В ключе имеются одинаковые буквы. " _ & "Введите другое ключевое слово", , "Ошибка в ключе" Exit Sub End If Next j Next i 'Проверям, есть ли подобные знаки в алфавите как в ключе For i = 1 To MarksInKey Text = Mid(Key, i, 1) x = InStr(Alphabet, Text) If x = 0 Then MsgBox "Знак '" & Text & "' не найден в алфавите. " _ & "Введите другое ключевое слово.", , "Ошибка в ключе" Exit Sub End If Next i 'Убираем буквы в алфавите, 'которые встречаются в ключе For i = 1 To MarksInKey Text = Mid(Key, i, 1) Alphabet = Replace(Alphabet, Text, "") Next i 'Создаем перемешанный буквенный алфавит 'на основе ключевого слова Alphabet = Key & Alphabet 'Перемешанный буквенный алфавит 'распределяем в массив ReDim AlphabetInArray(5, 6) x = 1 For i = 1 To 5 For j = 1 To 6 AlphabetInArray(i, j) = Mid(Alphabet, x, 1) x = x + 1 Next j Next i 'Считываем шифруемый текст EntranceText = txtEntrance. Text & " " 'Вычисляем кол-во знаков в тексте MarksInText = CInt(Len(EntranceText)) 'Представим фразу 'в виде последовательности биграмм, 'преобразовав строчные буквы в прописные Text = "": j = 1 For i = 1 To MarksInText If j Mod 2 <> 0 Then If Mid(EntranceText, i, 1) <> " " Then Text = Text & Mid(EntranceText, i, 1) j = j + 1 End If ElseIf j Mod 2 = 0 Then If Mid(EntranceText, i, 1) = " " Then Text = Text & "Ф" j = j + 1 Else Text = Text & Mid(EntranceText, i, 1) j = j + 1 End If End If Next i TextAsBigramm = StrConv(Text, vbUpperCase) 'Вычисляем кол-во знаков в тексте MarksInText = CInt(Len(TextAsBigramm)) 'Разбиваем текст на массив ReDim TextAsBigrammInArray(MarksInText / 2, 2) x = 1 For i = 1 To MarksInText / 2 For j = 1 To 2 TextAsBigrammInArray(i, j) = Mid(TextAsBigramm, x, 1) x = x + 1 Next j Next i 'Шифруем ReDim CodePlapher(MarksInText / 2, 2) For x = 1 To MarksInText / 2 A = TextAsBigrammInArray(x, 1) B = TextAsBigrammInArray(x, 2) 'Находим букву в массиве алфавита For i = 1 To 5 For j = 1 To 6 If AlphabetInArray(i, j) = A Then s1 = i: t1 = j ElseIf AlphabetInArray(i, j) = B Then s2 = i: t2 = j End If Next j Next i 'Выполняем замену по правилам: 'Правило 1 If s1 <> s2 And t1 <> t2 Then CodePlapher(x, 1) = AlphabetInArray(s1, t2) CodePlapher(x, 2) = AlphabetInArray(s2, t1) 'Правило 2 ElseIf s1 = s2 Then If t1 = 6 Then CodePlapher(x, 1) = AlphabetInArray(s1, 1) Else CodePlapher(x, 1) = AlphabetInArray(s1, t1 + 1) End If If t2 = 6 Then CodePlapher(x, 2) = AlphabetInArray(s2, 1) Else CodePlapher(x, 2) = AlphabetInArray(s2, t2 + 1) End If 'Правило 3 ElseIf t1 = t2 Then If s1 = 5 Then CodePlapher(x, 1) = AlphabetInArray(1, t2) Else CodePlapher(x, 1) = AlphabetInArray(s1 + 1, t2) End If If s2 = 5 Then CodePlapher(x, 2) = AlphabetInArray(1, t1) Else CodePlapher(x, 2) = AlphabetInArray(s2 + 1, t1) End If End If Next x 'Выводим перемешанный алфавит Text = "" For i = 1 To 5 For j = 1 To 6 Text = Text & AlphabetInArray(i, j) & " " Next j Text = Text & vbCrLf Next i txtAlphabetInArray. Text = Text 'Выводим текст в виде последовательности биграмм Text = "" For i = 1 To MarksInText / 2 For j = 1 To 2 Text = Text & TextAsBigrammInArray(i, j) Next j Text = Text & " " Next i txtBigramma. Text = Text 'Выводим шифр текст Text = "" For i = 1 To MarksInText / 2 For j = 1 To 2 Text = Text & CodePlapher(i, j) Next j Text = Text & " " Next i txtCodePlapher. Text = Text 'Выводим шифр текст без пробелов txtCodePlapher1.Text = StrConv(Replace(Text, " ", ""), vbProperCase) End Sub |
Входные и выходные данные
Входными данными являются 30 буквенный алфавит, ключ и шифруемый текст.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 |


