Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Создание и проверка криптографической защиты текстовой информации макросами языка 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 вариантов в секунду, что очень много для современных компьютеров.


 

Начало
4. Блок-схема алгоритма криптозащиты методом симметричного ключа для латинского алфавита.

 

Формирование вспомогательного латинского алфавита на основе пароля
Ввод пароля (фразы на латинском)  
Изменение всех символов кодируемого текста в соответствии с вспомогательным алфавитом
Удаление вспомогательного алфавита и пароля
Кодир-ование?
Формирование вспомогательного латинского алфавита на основе пароля
Ввод пароля (фразы на латинском)  
Из зашифрованного текста выбираются последовательно символы, определяется их номер во вспомогательном алфавите, после этого по номеру, но уже в основном алфавите подставляется символ
Удаление вспомогательного алфавита и пароля
Да
Нет
Декодированиее?
Да
Нет

 


Конец
                                                                                                                                                                     


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символов) состоящее из букв с разным регистром, символов с и цифр.

 



<== предыдущая лекция | следующая лекция ==>
Выбор 5 первоочередных действий | Создание простого справочника
Поделиться с друзьями:


Дата добавления: 2018-11-11; Мы поможем в написании ваших работ!; просмотров: 459 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Если вы думаете, что на что-то способны, вы правы; если думаете, что у вас ничего не получится - вы тоже правы. © Генри Форд
==> читать все изречения...

2319 - | 2226 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.014 с.