Главная страница
Навигация по странице:

  • Объекты CODEPLAPHER . FRM и значения их свойств

  • Исходный код CODEPLAPHAR . FRM

  • Криптографическая защита информации. Ведение Криптографическая защита информации


    Скачать 0.84 Mb.
    НазваниеВедение Криптографическая защита информации
    АнкорКриптографическая защита информации
    Дата25.12.2021
    Размер0.84 Mb.
    Формат файлаdoc
    Имя файлаКриптографическая защита информации.doc
    ТипДокументы
    #317994
    страница5 из 6
    1   2   3   4   5   6

    Блочные шифры простой замены (шифр Плейфера)

    Описание задачи


    Простейший блочный шифр оперирует с биграммными шифрвеличинами. Одними из первых таких шифров были биграммные шифры Порта и Плейфера. Приведем описание шифра Плейфера, нашедшего широкое применение в начале нашего века.

    Основой шифра Плейфера является прямоугольная таблица, в которую записан систематически перемешанный алфавит (для удобства запоминания). Правило зашифрования состоит в следующем.

    Буквы биграммы (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:

















    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 буквенный алфавит, ключ и шифруемый текст.

    Выходными данными являются перемешанный алфавит, текст в виде последовательности биграмм, шифр текст и шифр текст без пробелов.


      1. 1   2   3   4   5   6


    написать администратору сайта