|
Криптографическая защита информации. Ведение Криптографическая защита информации
Блочные шифры простой замены (шифр Плейфера) Описание задачи Простейший блочный шифр оперирует с биграммными шифрвеличинами. Одними из первых таких шифров были биграммные шифры Порта и Плейфера. Приведем описание шифра Плейфера, нашедшего широкое применение в начале нашего века.
Основой шифра Плейфера является прямоугольная таблица, в которую записан систематически перемешанный алфавит (для удобства запоминания). Правило зашифрования состоит в следующем.
Буквы биграммы (i,j), i<>j (являющейся шифрвеличиной) находятся в данной таблице. При зашифровании биграмма (i,j) заменяется биграммой (k,l), где k и l определяются в соответствии с правилами 1–3.
Если i и j не лежат в одной строке или одном столбце, то их позиции образуют противоположные вершины прямоугольника. Тогда k и l – другая пара вершин, причем k – вершина, лежащая в той же строке, что и i. Если i и j лежат в одной строке, то k и l – буквы той же строки, расположенные непосредственно справа от i и j соответственно. При этом если одна из букв – последняя в строке, то считается, что ее “правым соседом” является первая буква той же строки. Аналогично, если i и j лежат в одном столбце, то они заменяются их “соседями снизу”.
Наглядно правило зашифрования можно проиллюстрировать следующим образом.
В случае 1:
| …
|
| …
|
| …
| i
|
| k
| …
|
| …
| …
| …
|
| …
| l
|
| j
| …
|
| …
|
| …
|
|
В случае 2:
|
|
|
| I
| k
| ..
| j
| l
|
| k
|
| j
| l
|
| j
|
|
|
В случае 3:
| …
|
|
|
| k
|
|
| i
|
|
|
| …
|
|
| k
|
|
|
| j
|
| …
| …
| …
|
| …
| l
| …
|
| j
|
|
|
| …
|
|
| 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 буквенный алфавит, ключ и шифруемый текст.
Выходными данными являются перемешанный алфавит, текст в виде последовательности биграмм, шифр текст и шифр текст без пробелов.
|
|
|