Поиск: Рекомендуем: Почему я выбрал профессую экономистаПочему одни успешнее, чем другие Периферийные устройства ЭВМ Нейроглия (или проще глия, глиальные клетки) Категории: АстрономияБиология География Другие языки Интернет Информатика История Культура Литература Логика Математика Медицина Механика Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Транспорт Физика Философия Финансы Химия Экология Экономика Электроника
|
Создание и проверка криптографической защиты текстовой информации макросами языка VBA в среде WordMSOffice.
| ||
Выполнил: студент группы Б02-071-1зт Братухин А.А. Проверил: шамсиахметов о.я. | |||
Ижевск 2018 |
Цель работы: научится шифровать и дешифровать текстовою информацию, понять метод подбора паролей «bruteforce», узнать, какие пароле сложнее подобрать.
Ход работы:
1. Блок-схема алгоритма последовательного перебора паролей(bruteforce).
Переменная X = пароль |
Да |
Нет |
Конец |
Вывод Переменной X на экран |
Присваивание переменной ‘’X” значение 0 |
Начало |
Инкрементирование переменной “X” |
2. Программа подбора трехзначного пароля для ограниченного алфавита (до 10 символов) с обеспечением ввода используемого алфавита вручную при запуске программы.
' Код функции поиска нужного файла для кода доступа word
Function GetFilePath(Optional ByVal title As String = "Выберитефайлдляобработки", _
Optional ByValInitialPathAs String = "c:\", _
Optional ByValFilterDescriptionAs String = "Книги Excel", _
Optional ByValFilterExtentionAs String = "*.xls*") As String
' функция выводит диалоговое окно выбора файла с заголовком Title,
' начиная обзор диска с папки InitialPath
' возвращает полный путь к выбранному файлу, или пустую строку в случае отказа от выбора
' для фильтра можно указать описание и расширение выбираемых файлов
On Error Resume Next
With Application.FileDialog(msoFileDialogOpen)
.ButtonName = "Выбрать":.title = title:.InitialFileName = InitialPath
.Filters.Clear:.Filters.AddFilterDescription, FilterExtention
If.Show <> -1 Then Exit Function
GetFilePath =.SelectedItems(1): PS = Application.PathSeparator
End With
End Function
' КоддоступWord() сprogressbar
Sub ДоступWord()
Dim t!
Dim i As Integer, j As Integer, k As Integer
Dim l As Integer
Dim s As Integer
Dim kennwort As String
t = Timer
OnErrorResumeNext
' при возникновении ошибки во время выполнения управление передается оператору,
' непосредственно следующему за тем, в котором возникла ошибка, и выполнение продолжается с этой точки
NameFile = GetFilePath("Выберите файл Word",, "Документы Word", "*.docx") ' запрашиваем имя файла
IfNameFile = "" ThenExitSub ' выход, если пользователь отказался от выбора файла
Dim objWrdApp As Object
Dim objWrdDoc As Object
Set objWrdApp = GetObject(, "Word.Application")
If objWrdAppIs Nothing Then
Set objWrdApp = CreateObject("Word.Application")
End If
Dim bar As Progressbar ' создаемформупрогрессбара
Setbar = NewProgressbar
' создаем элементы формы прогресс бара
' последовательность создания элементов не имеет никакого значения, т.к.
' перед его создание проверяется наличие остальных. Если элементы найдены, то они сдвигаются
bar.createtimeFinish ' вывод строки для оставшегося времени
bar.createLoadingBar ' вывод полосы загрузки
'bar.createString ' вывод строки пройденных этапов из общего количества с указанием процента
bar.createtimeDuration ' текущая время обработки процесса
'bar.createTextBox ' вывод пустого текстового поля
bar.setParameters 100000, 0, 1 ' Задание параметров для последующей обработки:
' 1 - указание числа этапов процесса;
' 2 - интервал обновления формы, в данном случае ноль, но можно вовсе опустить
' 3 - интервал обновления в секундах, применяется, только если предыдущий _
аргумент равен нулю или опущен
bar.Start "Время процесса подбора паролей" ' запускаем прогресс бар перед началом процесса
s = 0
For i = 0 To 5
For j = 0 To 5
For k = 0 To 5
For l = 0 To 5
kennwort = CStr(i) &CStr(j) &CStr(k) &CStr(l)
s = s + 1
bar.Update s * 100 ' обновляем прогресс бар и передаем ему номер текущего этапа процесса
Set objWrdDoc = objWrdApp.Documents.Open(NameFile, PasswordDocument:=kennwort)
objWrdApp.Visible = True
If Err Then
Err.Clear
Else
MsgBox "Пароль = " &kennwort& " " & "завремя "& Format(Timer - t, "0.0 секунд")
UserForm4.TextBox1.Text = "парольподобран"
bar.exitBar ' Закрываем прогресс бар
Setbar = Nothing ' удаляем экземпляр класса прогресс бара
Exit Sub
End If
Next
Next
Next
Next
Set objWrdDoc = Nothing
Set objWrdApp = Nothing
EndSub
3. Экспертное заключение о желательной минимальной длине пароля для ценной текстовой информации. Подтвердить расчетом.
Если для пароля можно использовать спецсимволы (30 символов), цифры (10 символов), а также заглавные и строчные буквы как английского (52 символа), так и локализованного алфавита (66 символов), то количество возможных символов составит — 30 + 10 + 52 + 66 = 158. Для пароля из 10 символов количество его вариантов будет равняться 158^10 то есть 9 695 514 708 609 891 533 824 вариантам. Чтобы подобрать такой пароль за год, нужно перебирать 307 442 754 585 549 вариантов в секунду, что очень много для современных компьютеров.
Начало |
Формирование вспомогательного латинского алфавита на основе пароля |
Ввод пароля (фразы на латинском) |
Изменение всех символов кодируемого текста в соответствии с вспомогательным алфавитом |
Удаление вспомогательного алфавита и пароля |
Кодир-ование? |
Формирование вспомогательного латинского алфавита на основе пароля |
Ввод пароля (фразы на латинском) |
Из зашифрованного текста выбираются последовательно символы, определяется их номер во вспомогательном алфавите, после этого по номеру, но уже в основном алфавите подставляется символ |
Удаление вспомогательного алфавита и пароля |
Да |
Нет |
Декодированиее? |
Да |
Нет |
Конец |
5.Программа криптозащиты ценной текстовой информации для латинского прописного и строчного алфавита на языке VBA
' Код общих исходных данных для генератора шифратора и дешифратора
PublicSchetAsByte
PublicParFr, ParFr1, ParFr2 AsString 'Строка, зарезервированная под парольную фразу
DimPriznakM(26) AsByte 'признак, что данная строчная буква основного алфавита уже использована в шифроалфавите
DimPriznakB(26) AsByte 'признак, что данная прописная буква основного алфавита уже использована в шифроалфавите
DimSformMAsString 'сформированный строчный шифроалфавит по введенной парольной фразе, макросом Generator
DimSformBAsString 'сформированный прописной шифроалфавит по введенной парольной фразе, макросом Generator
DimObrMAsString 'сформированный обратный строчный шифроалфавит по введенной парольной фразе, макросом Generator
DimObrBAsString 'сформированный обратный прописной шифроалфавит по введенной парольной фразе, макросом Generator
DimPovtorAsByte '=0, то запросить парольную фразу, =1, то работать по ранее введенной парольной фразе
DimbukAsBoolean ' =истине, то это маленькая (строчная) буква
ConstNALU = "abcdefghijklmnopqrstuvwxyz" 'нормальный строчный алфавит
ConstNAL = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 'нормальный прописной алфавит
' Код для генератора
SubГенератор()
' Замена шифроалфавита. В парольной фразе только латинские буквы.
' Макрос можно вызывать для замены парольной фразы в течении одной сессии.
' если его не вызывать, то будет использоваться парольная фраза, введенная при первом шифровании,
' либо последняя парольная фраза, введенная через прямой вызов генератора
ParFr = "Pupils come to the library to take books on different subjects"
'этот участок проверяет начальную или текущую парольную фразу
IfSchet = 0 ThenParFr1 = ParFr
ParFr2 = InputBox("", "Введите парольную фразу", ParFr1)
IfLen(ParFr2) < 6 Then
MsgBox "Слишком короткая фраза, текущей осталась прежняя парольная фраза"
ParFr2 = ParFr1
If Povtor = 1 Then GoTo mm
EndIf
ParFr1 = ParFr2
Schet = Schet + 1 ' количество парольных фраз за одну сессию
Fori = 1 To 26
PriznakM(i) = 0 ' обнуляем признак использования всех букв строчного алфавита
PriznakB(i) = 0 ' обнуляем признак использования всех букв прописного алфавита
Next i
SformM = Empty
SformB = Empty
NsformM = 0
NsformB = 0
For i = 1 To Len(ParFr2)
Sim1 = Mid(ParFr2, i, 1) ' выбираем i-ый символ из парольной фразы
buk = False
Forj = 1 To 26 ' проверка наличия строчной буквы, иначе проверка на Прописную букву
If Sim1 = Mid(NALU, j, 1) Then buk = True
Next j
If buk = True Then
Forj = 1 ToNsformM
IfSim1 = Mid(SformM, j, 1) ThenGoTom 'эта буква уже есть в сформированном строчном алфавите
Nextj
SformM = SformM + Sim1 ' очередная строчная буква парольной фразы оказалась неиспользованной, добавляем ее в шифроалфавит
IndexM = Asc(Sim1) - Asc("a") + 1 ' определим номер этой строчной буквы в нормальном алфавите
PriznakM(IndexM) = 1 ' занесем признак уже использованной строчной буквы нормального алфавита
NsformM = NsformM + 1 ' кол-во сформированных строчных букв в шифроалфавите
Else
Forj = 1 To 26 ' проверка наличия прописной буквы
If Sim1 = Mid(NAL, j, 1) Then buk = True
Next j
If buk = True Then
For j = 1 ToNsformB
If Sim1 = Mid(SformB, j, 1) Then GoTo m 'этабукваужеесть в сформированномпрописномалфавите
Nextj
SformB = SformB + Sim1 ' очередная буква парольной фразы оказалась неиспользованной, добавляем ее в прописной шифроалфавит
IndexB = Asc(Sim1) - Asc("A") + 1 ' определим номер этой буквы в прописном нормальном алфавите
PriznakB(IndexB) = 1 ' занесем признак уже использованной буквы прописного нормального алфавита
NsformB = NsformB + 1 ' кол-во сформированных букв в прописном шифроалфавите
End If
End If
m:
Nexti
' сформировали часть шифроалфавита по парольной фразе
' а теперь надо добавить неиспользованные буквы нормального алфавита по порядку, чтобы шифроалфавит стал полным
Fori = 1 To 26
Sim1 = Mid(NALU, i, 1) ' выбираем i-ую букву из строчного нормального алфавита
IfPriznakM(i) = 0 Then 'если буква не использована в строчном шифроалфавите
SformM = SformM + Sim1 ' то добавляем ее туда
IndexM = Asc(Sim1) - Asc("a") + 1 ' определим порядковый номер добавленной буквы
PriznakM(IndexM) = 1 ' занесем признак уже использованной буквы
NsformM = NsformM + 1 ' кол-во сформированных букв в строчном шифроалфавите
End If
Next i
For i = 1 To 26
Sim1 = Mid(NAL, i, 1) ' выбираем i-ую букву из прописного нормального алфавита
IfPriznakB(i) = 0 Then 'если буква не использована в шифроалфавите
SformB = SformB + Sim1 ' то добавляем ее туда
IndexB = Asc(Sim1) - Asc("A") + 1 ' определим порядковый номер добавленной буквы
PriznakB(IndexB) = 1 ' занесем признак уже использованной буквы
NsformB = NsformB + 1 ' кол-во сформированных букв в прописном шифроалфавите
EndIf
Nexti
' Конец формирования шифроалфавита
' Генератор обратногошифроалфавита
ObrM = Empty
ObrB = Empty
For i = 1 To 26
Sim1 = Mid(NALU, i, 1) 'берем букву нормального строчного алфавита
Forj = 1 To 26
IfSim1 = Mid(SformM, j, 1) ThenIndex1 = j 'определяем ее номер в шифроалфавите
Nextj
Sim2 = Mid(NALU, Index1, 1) 'берем из нормального строчного алфавита букву по определенному номеру
ObrM = ObrM + Sim2 'добавляем ее в обратный строчный алфавит
Next i
For i = 1 To 26
Sim1 = Mid(NAL, i, 1) 'берем букву нормального прописного алфавита
Forj = 1 To 26
IfSim1 = Mid(SformB, j, 1) ThenIndex1 = j 'определяем ее номер в шифроалфавите
Nextj
Sim2 = Mid(NAL, Index1, 1) 'берем из нормального прописного алфавита букву по определенному номеру
ObrB = ObrB + Sim2 'добавляем ее в обратный прописной алфавит
Nexti
' Конец формирования обратного шифроалфавита
Povtor = 1 ' заносим признак того чтобы при повторе шифрования в течение сессии парольную фразу не запрашивать
mm:
EndSub
' Код шифратора
PublicSubШифратор() 'шифрование выделенного латинского текста
' последним выделенным символом НЕ должен быть знак форматирования (пробел, конец абзаца и т.д.)
' парольная фраза запрашивается 1 раз и сохраняется для всех шифрований(дешифрований) на время сессии
' чтобы сменить парольную фразу нужно закрыть и открыть документ заново или обратиться к макросу Generator
' латинские буквы и все небуквенные символы остаются без изменения
' у злоумышленника создается впечатление неправильной латинскойской кодировки маленьких букв в его компьютере
' НЕ рекомендуется шифровать начальные и конечные фразы писем, т.к. они содержат типовые фразы,
' облегчающиезлоумышленникувзлом
Dim Sim, ALU As String, Sym1 As Variant
Dim Index As Integer
Dim Result As String
Result = Empty
NChar = Selection.Start
NChar1 = Selection.End
IfNChar = NChar1 Then
CallMsgBox("Ничего не выделено", 64, "Шифратор")
GoTo mm
End If
If Povtor<> 1 Then
Генератор
Else
o1 = MsgBox(ParFr1, 3, "Текущая парольная фраза, ПРОДОЛЖИТЬ?")
If o1 <> 6 Then GoTo mm
End If
ALU = SformM
AL = SformB
' цикл чтения символа в выделенном фрагменте
For Each Sym1 InSelection.Characters
Sym = Sym1
Select Case Sym
Case "A" To "Z" 'обработкапрописныхбукв
' вычисляем порядковый номер текущего символа
IndexB = Asc(Sym) - Asc("A") + 1
' меняем текущий символ по номеру из строки AL
Sym = Mid(AL, IndexB, 1)
Case "a" To "z" 'обработкастрочныхбукв
' вычисляем порядковый номер текущего символа
IndexM = Asc(Sym) - Asc("a") + 1
' меняем текущий символ по номеру из строки ALU
Sym = Mid(ALU, IndexM, 1)
Case Else
'Sym = Empty
EndSelect
' добавляем измененный символ в результат
Result = Result + Sym
NextSym1
'обновляем выделенную часть текста
Selection.LanguageID = wdRussian
Selection.TypeText Result ' несохраняемвыделениетекста
UserForm4.TextBox1.Text = "Латинскийтекстзашифрован"
mm:
EndSub
' Код дешифратора
PublicSubДешифратор() ' дешифрование выделенного латинского текста
' последним выделенным символом НЕ должен быть знак форматирования (пробел, конец абзаца и т.д.)
' латинские буквы и все небуквенные символы остаются без изменения
' парольная фраза запрашивается 1 раз и сохраняется для всех шифрований(дешифрований) на время сессии
' чтобы сменить парольную фразу нужно закрыть и открыть документ заново или обратиться к макросу Generator
Dim Sim, ALUoAs String, Sym1 As Variant
Dim Index As Integer
Dim Result As String
Result = Empty
' проверяем, было ли выделение текста?
NChar = Selection.Start
NChar1 = Selection.End
IfNChar = NChar1 Then
CallMsgBox("Ничего не выделено", 64, "Дешифратор")
GoTomm
EndIf
'IfPovtor<> 1 ThenGenerator ' если это первое дешифрование за сессию - запускаем генератор шифроалфавитов по парольной фразе
IfPovtor<> 1 Then
Генератор
Else
o1 = MsgBox(ParFr1, 3, "Текущая парольная фраза, ПРОДОЛЖИТЬ?")
If o1 <> 6 Then GoTo mm
End If
'ALUo = ObrM
'ALo = ObrB
' цикл чтения символа в выделенном фрагменте
For Each Sym1 InSelection.Characters
Sym = Sym1
Select Case Sym
Case "A" To "Z" 'обработкапрописныхбукв
' вычисляем порядковый номер текущего символа
IndexB = Asc(Sym) - Asc("A") + 1
' меняем текущий символ по номеру из строки AL
Sym = Mid(ObrB, IndexB, 1)
Case "a" To "z" 'обработкастрочныхбукв
' вычисляем порядковый номер текущего символа
IndexM = Asc(Sym) - Asc("a") + 1
' меняем текущий символ по номеру из строки ALU
Sym = Mid(ObrM, IndexM, 1)
Case Else
'Sym = Empty
EndSelect
' добавляем измененный символ в результат
Result = Result + Sym
NextSym1
'обновляем выделенную часть текста
Selection.LanguageID = wdRussian
Selection.TypeText Result ' несохраняемвыделениетекста
UserForm4.TextBox1.Text = "Латинский текст расшифрован"
mm:
End Sub
Sub запуск()
UserForm4.Show
EndSub
Вывод:
В ходе лабораторной работы была создана программа по подбору трехзначного пароля для ограниченного алфавита, на языке VBA. Работа которой показана на блок – схеме алгоритма последовательного перебора паролей. Программа по криптозащите текстовой информации была выполнена в программе Word, которая имеет: «запуск подбора пароля», «запуск генератора кода», «запуск шифратора», «запуск дешифратора».
Эта программа показала, что самый защищенный пароль является длинное слово (не менее 10символов) состоящее из букв с разным регистром, символов с и цифр.
|
|
|
|
Дата добавления: 2018-11-11; Мы поможем в написании ваших работ!; просмотров: 459 | Нарушение авторских прав
Лучшие изречения:
Если вы думаете, что на что-то способны, вы правы; если думаете, что у вас ничего не получится - вы тоже правы. © Генри Форд
==> читать все изречения...