|
Криптографическая защита информации. Ведение Криптографическая защита информации
Описание задачи Этот метод заключается в том, что символы шифруемого текста переставляются по определенным правилам внутри шифруемого блока символов. Шифрование простой перестановкой осуществляется следующим образом:
выбирается ключевое слово с неповторяющимися символами; шифруемый текст записывается последовательными строками по дсимволами ключевого слова; зашифрованный текст выписывается колонками в той последовательности, в которой располагаются в алфавите буквы ключа (или в порядке следования цифр в натуральном ряду, если ключ цифровой).
Пример шифрования способом простой перестановки сообщения:
БУДЬТЕ ОСТОРОЖНЫ С ПРЕДСТАВИТЕЛЕМ ФИРМЫ "ФЕНИКС".
При этом применим цифровой ключ 5-8-1-3-7-4-6-2. В исходном тексте вместо пробелов используется символ *.
| Ключ
| 5
| 8
| 1
| 3
| 7
| 4
| 6
| 2
| Текст
| Б
| У
| Д
| Ь
| Т
| Е
| *
| О
| С
| Т
| О
| Р
| О
| Ж
| Н
| Ы
| *
| С
| *
| П
| Р
| Е
| Д
| С
| Т
| А
| В
| И
| Т
| Е
| Л
| Е
| М
| *
| Ф
| И
| Р
| М
| Ы
| *
| Ф
| Е
| Н
| И
| К
| С
| *
| *
|
Выписывая текст по колонкам и группируя символы по пять, получаем зашифрованный текст в виде:
ДО*ВФ НОЫСЕ **ЬРП ИИИЕЖ ЕЕМСБ С*ТМФ *НДЛЫ *ТОРТ РКУТС А*Е**
Расшифрование выполняется в следующем порядке:
подсчитываем число знаков в зашифрованном тексте и делим на число знаков ключа; выписываем ключевое слово и под его знаками в соответствующей последовательности выписываем символы зашифрованного текста в определенном выше количестве; по строкам таблицы читаем исходный текст.
Слабость шифрования простой перестановкой обуславливается тем, что при большой длине шифруемого текста в зашифрованном тексте могут проявиться закономерности символов ключа. Для устранения этого недостатка можно менять ключ после зашифровки определенного числа знаков. При достаточно частой смене ключа стойкость шифрования можно существенно повысить. При этом, однако, усложняется организация процесса шифрования и расшифрования.
Усложнение перестановки по таблице заключается в том, что для записи символов шифруемого текста используется специальная таблица, в которую введены некоторые усложняющие элементы. Таблица представляет собой матрицу размерами 10х10 элементов (размеры могут быть выбраны произвольно), в которую, как и в случае простой перестановки, записываются знаки шифруемого текста. Усложнение состоит в том, что определенное число клеток таблицы не используется. Количество и расположение неиспользуемых элементов является дополнительным ключом шифрования. Шифруемый текст блоками по mxn-s элементов (mxn - размеры таблицы, s - число неиспользуемых элементов) записывается в таблицу. Далее процедура шифрования аналогична простой перестановке.
| Ключ
| 2
| 6
| 1
| 3
| 8
| 0
| 5
| 9
| 4
| 7
| КТСекст
| Б
| У
| Д
|
| Ь
| Т
| Е
| *
| О
| С
|
| Т
| О
| Р
| О
| Ж
| Н
|
| Ы
| *
| С
| *
| П
| Р
| Е
| Д
| С
| Т
|
| А
| В
| И
|
| Т
| Е
| Л
| Е
| М
| *
| Ф
| И
|
| Р
| М
| Ы
| *
| Ф
| Е
| Н
| И
| К
| С
| *
| *
| *
|
| *
| *
| *
| *
|
Зашифрованный текст будет выглядеть так: ДОПР* БСВИК РРТМ* ОЫ*Н* ЕНСЕФ *УТ*И СС*АФ И*ЬОЕ ЕЫ**Т МЕ*ТЖ ДЛ*** При расшифровании знаки зашифрованного текста записываются столбцами таблицы в последовательности знаков ключа с пропуском неиспользуемых элементов. Исходный текст считывается по строкам.
Варьируя размерами таблицы, последовательностью символов ключа, количеством и расположением неиспользуемых элементов, можно получить требуемую стойкость зашифрованного текста.
Описание логической структуры Для шифрования текста методом одиночной перестановки по ключу, выполним следующие действия:
вводим исходный текст; убираем пробелы в тексте и преобразуем строчные буквы в прописные; определяем количество знаков в тексте; вводи размеры квадрата; проверяем введенные размеры квадрата; вводим ключевое слово; проверяем введенное ключевое слово; разбиваем ключевое слово на одномерный массив; сортируем ключевое слово по возрастанию; разбиваем шифруемый текст на массив; формируем шифрованный текст соответствием с ключевым словом; выводим шифрованный текст.
Объекты CODEROUTKEY.FRM и значения их свойств
| Тип и номер1
| Свойство
| Значение
| Form
|
|
|
| Name
| frmCodeRoutKey
|
| BorderStyle
| 4 – Fixed ToolWindows
|
| Caption
| Одиночная перестановка по ключу
|
| MaxButton
| 0 – False
|
| MDIChild
| -1 – True
|
| MinButton
| 0 – False
|
| ShowInTaskbar
| 0 – False
| Label
|
|
| 1
| Name
| LabTitle
|
| Alignment
| 2 – Center
|
| Caption
| ОДИНОЧНАЯ ПЕРЕСТАНОВКА ПО КЛЮЧУ
|
| Font
|
|
|
| Underline
| -1 – True
| Label
|
|
| 2
| Name
| lblEntrance
|
| Caption
| 1. Введите шифруемый текс:
|
| Font
|
|
|
| Underline
| -1 – True
| TextBox
|
|
| 3
| Name
| txtEntrance
| CommandButton
|
|
| 4
| Name
| cmdNumОfMarks
|
| Caption
| Подсчет знаков
| Label
|
|
| 5
| Name
| lblHWArray
|
| Caption
| 2. Введите высоту и ширину прямоугольника:
|
| Font
|
|
|
| Underline
| -1 – True
| TextBox
|
|
| 6
| Name
| txtHArray
|
| Alignment
| 2 – Center
| Label
|
|
| 7
| Name
| lblX
|
| Alignment
| 2 – Center
|
| Caption
| X
| TextBox
|
|
| 8
| Name
| txtWArray
|
| Alignment
| 2 – Center
| CommandButton
|
|
| 9
| Name
| cmdCodeRoutKey
|
| Caption
| Одиночная перестановка по ключу
| TextBox
|
|
| 10
| Name
| txtCodeRoutKey
| Label
|
|
| 11
| Name
| lblKey
|
| Alignment
| 2 – Center
| 1 Номер указанный в первой колонке, соответствует порядковому номеру объекта на форме (рис. )
|
Исходный код CODEROUTKEY.FRM
| Option Explicit Private Sub cmdCodeRoutKey_Click()
'Описание переменных
Dim TextWBlanks As String 'Текст без пробелов
Dim MarksInText As Integer 'Число знаков в тексте
Dim HArray As Integer 'Кол-во строк
Dim WArray As Integer 'Кол-во столбцов
Dim HWArray As Integer 'Произведение кол-ва строк на столбцы
'Убираем пробелы в тексте
'и преобразуем строчные буквы в прописные
TextWBlanks = StrConv(Replace(txtEntrance.Text, " ", ""), vbUpperCase)
'Вычисляем колличество знаков в тексте
MarksInText = CInt(Len(TextWBlanks))
HArray = CInt(txtHArray.Text)
WArray = CInt(txtWArray.Text)
'Проверка введенных размеров массива
HWArray = HArray * WArray
If HWArray <> MarksInText Then
MsgBox "Не правильно ввели высоту и ширину прямоуголника"
Exit Sub
End If
'Обращаемся к функции CodeRoutKey
txtCodeRoutKey.Text = CodeRoutKey(TextWBlanks, HArray, WArray)
End Sub Private Sub CmdNumОfMarks_Click()
'Описание переменных
Dim TextWBlanks As String 'Текст без пробелов
Dim MarksInText As String 'Чило знаков в тексте
'Убираем пробелы в тексте
TextWBlanks = Replace(txtEntrance.Text, " ", "")
'Вычисляем колличество знаков в тексте
MarksInText = Len(TextWBlanks)
cmdNumОfMarks.Caption = "В тексте " & MarksInText & " знака(ов) без пробела"
End Sub Function CodeRoutKey(TextWBlanks As String, HArray As Integer, WArray As Integer)
'Шифрование методом одиночной перестановки по ключу
'Описание переменных
Dim TextInArray() As String 'Текст в массиве
Dim KeyInArray() As String 'Ключ в массиве
Dim KeyNum() As Integer 'Номер буквы ключивого слова
Dim x%, w%, e%
Dim Text As String 'Формирование шифрованного шрифта
Dim Key As String 'Ключ
Dim AuxKey 'Вспомогательное переменное
'Вводим ключевой текст
Key = InputBox("Введите ключь из " & WArray & " знаков")
lblKey.Caption = "Ключ: '" & Key & "'"
'Проверка введенного ключевого слова
If Key = "" Then
MsgBox "Вы не ввели ключевой текст"
Exit Function
Else
If Len(Key) <> WArray Then
MsgBox "Ключ не равен " & WArray & " знакам"
Exit Function
End If
End If
'Разбиваем ключевое слово на одномерный массив
ReDim KeyInArray(WArray)
ReDim KeyNum(WArray)
For w = 1 To WArray
KeyInArray(w) = Mid(Key, w, 1)
KeyNum(w) = w
Next w
'Сортируем ключ по возрастанию
For w = 1 To WArray
For e = 1 To WArray
If KeyInArray(w) < KeyInArray(e) Then
AuxKey = KeyInArray(w)
KeyInArray(w) = KeyInArray(e)
KeyInArray(e) = AuxKey
AuxKey = KeyNum(w)
KeyNum(w) = KeyNum(e)
KeyNum(e) = AuxKey
End If
Next e
Next w
'Разбиваем текст на массив
ReDim TextInArray(HArray, WArray)
x = 1
For e = 1 To HArray
For w = 1 To WArray
TextInArray(e, w) = Mid(TextWBlanks, x, 1)
x = x + 1
Next w
Next e
'Шифруем
Text = ""
For w = 1 To WArray
For e = 1 To HArray
Text = Text & TextInArray(e, KeyNum(w))
Next e
Text = Text & " "
Next w
CodeRoutKey = Text
End Function
|
В ходные и выходные данные Входными данными являются высота и ширина прямоугольника, ключ и шифруемый текст.
Выходными данными является шифрованный текст.
|
|
|