Мегаобучалка Главная | О нас | Обратная связь


Порядок выполнения программы Шифрование/Дешифрование текстовых фрагментов документа Word по парольной фразе (симметричный ключ).



2019-11-13 568 Обсуждений (0)
Порядок выполнения программы Шифрование/Дешифрование текстовых фрагментов документа Word по парольной фразе (симметричный ключ). 0.00 из 5.00 0 оценок




Встраиваемая в документ Word программа (в виде макроса) предназначена для шифрования/дешифрования выделенного фрагмента русского текста по парольной фразе, которая нигде в файле не хранится и поэтому не может быть взломана.

Для этого ее необходимо выделить (в загруженном документе Word) текст по желанию и запустить макрос Дешифратор.

 В Word 2017/2013 макросы можно запускать через меню Вид–Макросы–Макросы–Макросы из–Документ. Перед этим при открытии документа будет сообщение о наличии в нем макросов, их выполнение необходимо разрешить или заранее выполнить Файл→Параметры–Центр управления безопасностью→Параметры центра управления безопасностью→Включить все макросы.

Запустите макрос Генератор и введите новую парольную фразу.

 

Вновь выделите зашифрованный текст и запустите макрос Дешифратор. Проверьте еще раз текущую парольную фразу, которую Дешифратор Вам напомнит перед расшифровкой:

Количество шифруемых фрагментов в одном документе не ограничено. Для каждого выделяемого фрагмента текста можно задавать свою парольную фразу, по умолчанию используется предыдущая. Вся программа в виде трех макросов встраивается в документ Word, который отправляется любому получателю и тому не требуется никаких дополнительных файлов для расшифровки. Встроенные макросы выполняют следующие функции:

 Шифратор – шифрование выделенной части текста,

Дешифратор – дешифрование выделенной части текста,

Генератор – ввод новой парольной фразы для генерации нового шифроалфавита. Текст программы не позволит расшифровать документ без знания парольной фразы. Для удобства шифрования и дешифрования на панели быстрого доступа или ленте Word можно создать кнопки для запуска всех трех макросов.

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

Выделяемый для шифрования фрагмент не должен заканчиваться на знак форматирования Word (пробел, конец абзаца и т. д.); для шифрования текста в таблицах можно выделять только по одной ячейке.

Отправителю документа, желающего зашифровать часть текста в нем, необходимо выделить этот фрагмент и запустить макрос Шифратор. Если это был первый шифруемый фрагмент, то будет запрошена парольная фраза, которую необходимо ввести для формирования шифроалфавита.

Если следующий фрагмент отправитель желает зашифровать другой парольной фразой, то необходимо запустить макрос Генератор и ввести новую парольную фразу, которая становится текущей и применяется для всех последующих шифрований в течение сессии, пока пользователь ее не сменит.

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

Получателю документа, часть которого зашифрована этими макросами, необходимо разрешить выполнение макросов в своем приложении Microsoft Word, выделить зашифрованную часть текста, запустить макрос Дешифратор и ввести в появившемся окне парольную фразу. Если в полученном документе есть несколько зашифрованных фрагментов, разделенных открытым текстом, то получателю необходимо выделить следующую часть зашифрованного текста и повторить действия. Если получатель знает, что следующие      фрагменты зашифрованы другой парольной фразой, то необходимо запустить макрос Генератор, ввести новую парольную фразу и повторить действия по расшифровке.

В Word 2007/2013 макросы можно запускать через меню Вид–Макросы–Макросы–Макросы из–Документ. Перед этим при открытии документа будет сообщение о наличии в нем макросов, их выполнение необходимо разрешить. Более удобно запуск макросов производить через кнопки на панели быстрого доступа.

Это делается через меню Файл–Параметры–Панель быстрого доступа–Выбрать команды из–Макросы. Далее выделяем по очереди каждый их трех макросов и нажимаем Добавить. Затем их по очереди выделяем в правом окне и внизу щелкаем Изменить–Отображаемое имя. В поле вводим нужное нам название кнопки, например: «Шифратор».

Если Вы переписываетесь с постоянным клиентом, макросы можно (и получателю и отправителю) переместить из раздела ThisDocument в Normal – Modules – NewMacros, тогда файлы будут пересылаться «чистыми» без макросов, которые будут храниться уже в приложении Word и у отправителя и у получателя.

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

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

 

                                            Ход работы.

1.Создать программу по подбору паролей (последовательный перебор-“ brute force”) на языке VBA для MS Office Word 2007/2013 с целью проверки стойкости установленных паролей на текстовые файлы.

1.1 Создание пользовательского диалогового окна:

1.Открыть документ Word в новом окне. Дать ему имя “kodtext. docm” и сохранить его на жестком диске.

  Нажать комбинацию клавиш <Alt+F11> для запуска VBA.

  В окне Project выделить имя рабочего проекта Project ( Kodtext ), а затем выбрать Insert→ UserForm, чтобы добавить пустое диалоговое окно.

Изменить у объекта UserForm1 в окне Properties свойства  Caption→“Криптозащита текстовой информации” (если окно Properties не отображается на экране, нажмите клавишу <F4>),

ShowModal → False .

Добавить на форму элемент управления Label1 из окна Toolbox (если окно не наблюдается, то щелкнуть по форме “Криптозащита текстовой информации” и нажать клавиши Ctrl+R) и изменить его свойства Caption→“ Подбор пароля Word”. Изменить размеры Label1 растягиванием за маркеры объекта и свойство цвета BackColor .

Добавить на форму элемент управления Label2 и изменить его свойства   Caption→“ Программа Иванова Ивана Ивановича”. Изменить Caption на свои Ф.И.О.

Изменить размеры Label2 растягиванием за маркеры объекта и свойство цвета

 BackColor . Добавить на форму элемент управления Label3 и измените его свойство  Caption→ “ Генератор кода”

Изменить размеры Label3  растягиванием за маркеры объекта и свойство цвета

 BackColor .

Добавьте на форму элемент управления Label4 и измените его свойства Caption→“ Шифратор”.Изменить размеры Label4  растягиванием за маркеры объекта и свойство цвета BackColor .

 Добавить на форму элемент управления Label5 и изменить его свойства Caption→ “ Дешифратор”

Изменить размеры Label5 растягиванием за маркеры объекта и свойство цвета

 BackColor .

Добавить элемент управления TextBox1 и изменить его свойства                 Text→“Программа готова к выполнению”, TextAlign →2.

Изменить размеры TextBox1, растягивая его за края маркера.

Добавить элемент управления Frame (рамка) и изменить его свойство

Caption→“Автор” .

 Выбрать в свойствах по своему вкусу цвет фона рамки Backcolor из списка, цвет контура рамки Border Color,шрифт Times New Roman, подобрать размеры рамки, растягивая ее за маркеры края.

Добавить на рамку Frame путем перетягивания Label 2 (там есть текст “Иванов Иван Иванович”).Растянуть Label 2 по рамке до ее заполнения ,оставляя поля.Изменить размер шрифта в свойствах Properties.

Добавить элемент управления CommandButton1 за пределами элемента управления Frame и изменить его свойства Caption → “Запуск подбора”.

Изменить размер кнопки по своему вкусу, растягивая ее за маркеры края, настроить цвет в свойствах BackColor.

Добавить элемент управления CommandButton2 за пределами элемента управления Frame и измените его свойства: Caption → “Запуск генератора кода”

Изменить размер кнопки по своему в вкусу, растягивая ее за маркеры края, настроить цвет в свойствах BackColor.

Добавьте элемент управления CommandButton3 за пределами элемента управления Frame и измените его свойства: Caption → “Запуск шифратора”

Изменить размер кнопки по своему в вкусу, растягивая ее за маркеры края, настроить цвет в свойствах BackColor

Добавьте элемент управления CommandButton4 за пределами элемента управления Frame и измените его свойства: Caption → “Запуск дешифратора”

Изменить размер кнопки по своему в вкусу, растягивая ее за маркеры края, настроить цвет в свойствах BackColor

Добавьте элемент управления CommandButton5 за пределами элемента управления Frame и измените его свойства: Caption → “Выход из программы”

Изменить размер кнопки по своему в вкусу, растягивая ее за маркеры края, настроить цвет в свойствах BackColor

Общий вид пользовательской формы показан на рисунке 7:

 

 

1.2 Создать код для отображения диалогового окна:

После создания элементов управления в программе Word необходимо добавить кнопку запуска пользовательской формой. Эта кнопка будет запускать процедуру, которая предназначена для отображения формы UserForm. Для этого выполните следующие действия.

В окне (слева от основного) Project Explorer (View→ Project Explorer или Ctrl+R) выделить название проекта Project (Kodtext) →Insert→Module. Появитьсяпапка Modules вокне Project Explorer, в ней Module1.

Выделить Module 1→правая кнопка мышки→ View Code . В появившемся окне добавить следующий код:

                         Sub запуск()

             UserForm 1. Show

                             End Sub

 Перейти в окно Word (воспользуйтесь комбинацией клавиш <Alt+Fll>).Должно появиться окно документа “ kodtext . docm ” (если нет, выбрать именно этот документ).

Перейти в меню Вид→МакросыЗапускВыполнить.

Это приведет к активизации пользовательской формы (рис 7).

Форму можно закрыть (крестик в верхнем правом углу формы)

Нажать кнопку Офис (круглая кнопка в верхнем левом углу экрана)→Параметры Word →Настройка→выбрать команды из “макрос”→” Project . Module 1.запуск”→Добавить→ОК.

Кнопка запуска программы криптозащиты появиться в панели быстрого доступа (левый верхний угол экрана).Нажать на нее.

Диалоговое окно будет отображено, но  ни одна кнопка на форме не будет работать. Поэтому необходимо подключить к каждому элементу процедуру обработки событий.

Нажать комбинацию клавиш <Alt+Fll>. Это приведет к активизации экрана VBE.

Удостовериться, что пользовательское диалоговое окно отображено на экране и дважды щелкните на кнопке “Выход из программы”. Таким образом, будет активизировано окно кода для объекта кнопки формы UserForm1, также будет добавлена пустая процедура → CommandButton5_Click(). Обратите внимание, что название процедуры состоит из имени объекта, символа подчеркивания и названия события, которое обрабатывает процедура.

 

 Модифицировать процедуру , добавив следующий код:

Private Sub CommandButton5_Click() ‘эта строка сгенерирована самой программой

UserForm 1. Hide

End Sub ‘эта строка сгенерирована самой программой

Данная процедура выполняется после щелчка пользователем на кнопке “Выход из программы”. Она вызывает выгрузку формы UserForm1 из памяти.

Перейти в окно Word (воспользуйтесь комбинацией клавиш <Alt+Fll>).Должно появиться окно документа “ kodtext . docm ” (если нет, выбрать именно этот документ).

Нажать на кнопку запуска программы криптозащиты в панели быстрого доступа (левый верхний угол экрана). Появиться пользовательская форма. Далее нажать на кнопку “Выход из программы”. Пользовательская форма закроется.

Повторить создание других кнопок аналогичным образом.

Удостовериться, что пользовательское диалоговое окно отображено на экране и дважды щелкнуть на кнопке “Запуск подбор пароля”. Будет активизировано окно кода для объекта кнопки формы UserForm1, также будет добавлена пустая процедура → CommandButton1_Click().

Модифицируйте процедуру, добавив следующий код:

Private Sub CommandButton 1_ Click () ‘ эта строка сгенерирована самой программой

Call Доступ Word

End Sub ‘ эта строка сгенерирована самой программой

 Нажать комбинацию клавиш <Shift+F7>, чтобы повторно отобразить объект UserForm1 (или щелкнуть на значке View Object в верхней части окна Project Explorer).

 Дважды щелкнуть на кнопке “Запуск генератора кода”. Таким образом, будет активизировано окно кода для объекта кнопки формы UserForm1, также будет добавлена пустая процедура → CommandButton2_Click().

 Модифицировать процедуру, добавив код:

Private Sub CommandButton2_Click()‘ эта строка сгенерирована самой программой

Call Генератор

End Sub ‘ эта строка сгенерирована самой программой

Дважды щелкнуть на кнопке “Запуск шифратора”. Таким образом, будет активизировано окно кода для объекта кнопки формы UserForm1, также будет добавлена пустая процедура → CommandButton3_Click().

Модифицировать процедуру, добавив код:

Private Sub CommandButton3_Click()‘ эта строка сгенерирована самой программой

Call Шифратор

End Sub ‘ эта строка сгенерирована самой программой

Дважды щелкнуть на кнопке “Запуск дешифратора”. Таким образом, будет активизировано окно кода для объекта кнопки формы UserForm1, также будет добавлена пустая процедура → CommandButton4_Click().

Модифицировать процедуру, добавив код:

Private Sub CommandButton4_Click()‘ эта строка сгенерирована самой программой

Call Дешифратор

End Sub ‘ эта строка сгенерирована самой программой

Выделить Module 1→правая кнопка мышки→ View Code . В появившемся окне добавить следующий код:

 Вставить два фрагмента кода последовательно друг за другом:

         Внимание! Вставлять код надо впереди уже имеющегося кода

        (у нас там следующий код лежит :                              

                            Sub запуск ()

             UserForm1.Show

                               End Sub

Добавляем только этот код:

‘ Код функции поиска нужного файла для кода доступа word

Function GetFilePath(Optional ByVal Title As String = "Выберите файл для обработки", _

                 Optional ByVal InitialPath As String = "c:\", _

                 Optional ByVal FilterDescription As String = "Книги Excel", _

                 Optional ByVal FilterExtention As String = "*.xls*") As String

' функция выводит диалоговое окно выбора файла с заголовком Title,

' начиная обзор диска с папки InitialPath

' возвращает полный путь к выбранному файлу, или пустую строку в случае отказа от выбора

' для фильтра можно указать описание и расширение выбираемых файлов

On Error Resume Next

With Application.FileDialog(msoFileDialogOpen)

    .ButtonName = "Выбрать": .Title = Title: .InitialFileName = InitialPath

    .Filters.Clear: .Filters.Add FilterDescription, 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

On Error Resume Next

' при возникновении ошибки во время выполнения управление передается оператору,

' непосредственно следующему за тем, в котором возникла ошибка, и выполнение продолжается с этой точки

NameFile = GetFilePath("Выберите файл Word", , "Документы Word", "*.docx") ' запрашиваем имя файла

If NameFile = "" Then Exit Sub ' выход, если пользователь отказался от выбора файла

 Dim objWrdApp As Object

Dim objWrdDoc As Object

Set objWrdApp = GetObject(, "Word.Application")

   If objWrdApp Is Nothing Then

       Set objWrdApp = CreateObject("Word.Application")

    End If

Dim bar As Progressbar ' создаем форму прогресс бара

Set bar = New Progressbar

' создаем элементы формы прогресс бара

' последовательность создания элементов не имеет никакого значения, т.к.

' перед его создание проверяется наличие остальных. Если элементы найдены, то они сдвигаются

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 секунд")

    UserForm1.TextBox1.Text = "пароль подобран"

      bar.exitBar ' Закрываем прогресс бар

     Set bar = Nothing ' удаляем экземпляр класса прогресс бара

       Exit Sub

   End If

Next

Next

Next

 Next                           

Set objWrdDoc = Nothing

Set objWrdApp = Nothing

 End Sub

В окне (слева от основного) Project Explorer (View → Project Explorer или Ctrl + R) выделить название проекта Project ( Kodtext ) → Insert → UserForm . Появитьсявокне Project Explorer впапке Forms новая форма UserForm 2.

 

Необходимо ее переименовать UserForm 2→правая клавиша мышки→контекстное меню→ View Object→в списке свойств Properties найти свойство Name →изменить UserForm 2 на barForm → OK

Выделить barForm →правая кнопка мышки→ View Code . В появившемся окне добавить следующий код:

‘ Код barForm

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

If CloseMode = vbFormControlMenu Then

   ans = MsgBox("Нажмите ""Да"", чтобы остановить процесс." & Chr(13) & _

       "Нажмите ""Нет"", ""Отмена"" или закройте это окно, чтобы закрыть только окно загрузки.", _

       vbYesNoCancel + vbQuestion, "Остановить процесс?")

   If ans = 6 Then

       End

   Else

       Unload barForm

   End If

End If

End Sub

 

 

В окне (слева от основного) Project Explorer (View→ Project Explorer или Ctrl+R) выделить название проекта Project (Kodtext) →Insert→ Class Module. Появитьсявокне Project Explorer впапке Class Modules новый класс Class1.

Необходимо его переименовать Class1→ правая клавиша мышки → контекстное меню →View Object→в списке свойств Properties найти свойство Name→изменить Class1 на Progressbar →OK

Выделить  Progressbar → правая кнопка мышки →View Code. В появившемся окне добавить следующий код:

 

‘ Код класса Progressbar

Private timeStart As Date

Private allProcess As Long

Private UpdInterval As Long

Private UpdTimeInterval As Long ' в секундах

Private prevUpdate As Double

Private prev As Long

Private formProgress As New barForm

 

Private Sub Class_Initialize()

Load formProgress

prev = 0

prevUpdate = 0

UpdInterval = Empty

UpdTimeInterval = Empty

End Sub

Sub Start(Optional title As String = "Процесс выполнения")

timeStart = Now

formProgress.Caption = title

formProgress.Show False

End Sub

Sub exitBar()

Unload formProgress

End Sub

Sub createString()

' создание элемента формы для сообщения текстовой информации пользователю

' перебираем элементы формы для изменения параметров

t = 5

h = 49

For Each cntr In formProgress.Controls

 

' если элемент уже добавлялся, то прекращаем

If cntr.Name = "String" Then

   MsgBox "Элемент уже был создан!", vbCritical, "Ошибка"

   Exit Sub

       

' проверяем на наличие других элементов

ElseIf TypeName(cntr) = "TextBox" Then

   cntr.Top = cntr.Top + 20

   h = h + 55

ElseIf cntr.Name = "bar" Then

   h = h + 20

   t = t + 20

ElseIf cntr.Name = "Duration" Or cntr.Name = "Finish" Then

   cntr.Top = cntr.Top + 20

   h = h + 20

End If

Next cntr

 

formProgress.Width = 340

formProgress.Height = h

 

' создаем lable с пустым текстом

Set vCommand = formProgress.Controls.Add("Forms.Label.1")

With vCommand

   .Left = 10

   .Top = t

   .Width = 325

   .Height = 15

   .Name = "String"

   .Caption = ""

End With

 

End Sub

Sub createTextBox()

' создание элемента формы для множественных сообщений пользователю

' перебираем элементы формы для изменения параметров

t = 5

h = 84

 

For Each cntr In formProgress.Controls

 

' если элемент уже добавлялся, то прекращаем

If TypeName(cntr) = "TextBox" Then

   MsgBox "Элемент уже был создан!", vbCritical, "Ошибка"

   Exit Sub

       

' проверяем на наличие других элементов

ElseIf cntr.Name = "String" Then

   t = t + 20

   h = h + 20

ElseIf cntr.Name = "bar" Or cntr.Name = "Duration" Or cntr.Name = "Finish" Then

   h = h + 20

   t = t + 20

End If

Next cntr

 

formProgress.Width = 340

formProgress.Height = h

 

' создаем TextBox с пустым текстом

Set vCommand = formProgress.Controls.Add("Forms.TextBox.1")

With vCommand

   .Left = 5

   .Top = t

   .Width = 325

   .Height = 50

   .Name = "Text"

   .MultiLine = True

   .WordWrap = True

End With

 

End Sub

Sub createtimeDuration()

' создание элемента формы для сообщения продолжительности процесса пользователю

' перебираем элементы формы для изменения параметров

t = 5

h = 49

For Each cntr In formProgress.Controls

 

' если элемент уже добавлялся, то прекращаем

If cntr.Name = "Duration" Then

   MsgBox "Элемент уже был создан!", vbCritical, "Ошибка"

   Exit Sub

       

' проверяем на наличие других элементов

ElseIf TypeName(cntr) = "TextBox" Then

   cntr.Top = cntr.Top + 20

   h = h + 55

ElseIf cntr.Name = "bar" Or cntr.Name = "String" Then

   h = h + 20

   t = t + 20

ElseIf cntr.Name = "Finish" Then

   h = h + 20

   cntr.Top = cntr.Top + 20

End If

Next cntr

 

formProgress.Width = 340

formProgress.Height = h

 

' создаем lable с пустым текстом

Set vCommand = formProgress.Controls.Add("Forms.Label.1")

With vCommand

   .Left = 10

   .Top = t

   .Width = 325

   .Height = 15

   .Name = "Duration"

   .Caption = ""

End With

 

End Sub

Sub createtimeFinish()

' создание элемента формы для сообщения оставшегося времени процесса пользователю

' перебираем элементы формы для изменения параметров

t = 5

h = 49

For Each cntr In formProgress.Controls

 

' если элемент уже добавлялся, то прекращаем

If cntr.Name = "Finish" Then

   MsgBox "Элемент уже был создан!", vbCritical, "Ошибка"

   Exit Sub

       

' проверяем на наличие других элементов

ElseIf TypeName(cntr) = "TextBox" Then

   cntr.Top = cntr.Top + 20

   h = h + 55

ElseIf cntr.Name = "bar" Or cntr.Name = "String" Or cntr.Name = "Duration" Then

   h = h + 20

   t = t + 20

End If

Next cntr

 

formProgress.Width = 340

formProgress.Height = h

 

' создаем lable с пустым текстом

Set vCommand = formProgress.Controls.Add("Forms.Label.1")

With vCommand

   .Left = 10

    .Top = t

   .Width = 325

   .Height = 15

   .Name = "Finish"

   .Caption = ""

End With

 

End Sub

Sub createLoadingBar()

' создание элемента формы для полосы загрузки

' перебираем элементы формы для изменения параметров

h = 49

 

For Each cntr In formProgress.Controls

 

' если элемент уже добавлялся, то прекращаем

If cntr.Name = "container" Or cntr.Name = "bar" Then

   MsgBox "Элемент loadingBar уже был создан!", vbCritical, "Ошибка"

   Exit Sub

   

' проверяем на наличие других элементов

ElseIf TypeName(cntr) = "TextBox" Then

   cntr.Top = cntr.Top + 20

   h = h + 55

ElseIf cntr.Name = "Finish" Or cntr.Name = "Duration" Or cntr.Name = "String" Then

   cntr.Top = cntr.Top + 20

   h = h + 20

End If

Next cntr

 

formProgress.Width = 340

formProgress.Height = h

 

' создаем lable с пустым текстом

Set vCommand = formProgress.Controls.Add("Forms.Label.1")

With vCommand

   .Left = 5

   .Top = 5

   .Width = 325

   .Height = 15

   .Name = "container"

   .Caption = ""

   .TabIndex = 0

   .BackColor = &H80000004

End With

Set vCommand = Nothing

Set vCommand = formProgress.Controls.Add("Forms.Label.1")

With vCommand

   .Left = 5

  .Top = 5

   .Width = 0

   .Height = 15

   .Name = "bar"

   .Caption = ""

   .TabIndex = 1

   .BackColor = &H80000002

End With

 

End Sub

Sub setParameters(expProcess_INT As Long, Optional UpdateInterval_INT As Long, Optional UpdTimeInterval_INT_SEC As Long)

' устанавливаем ожидаемое число процессов для прогресс бара

allProcess = expProcess_INT

If Not IsMissing(UpdateInterval_INT) And UpdateInterval_INT > 0 Then

   UpdInterval = UpdateInterval_INT

ElseIf Not IsMissing(UpdTimeInterval_INT_SEC) And UpdTimeInterval_INT_SEC > 0 Then

                                                               UpdTimeInterval = UpdTimeInterval_INT_SEC

Else: UpdTimeInterval = 1

End If

End Sub

Function Update(Optional ByVal curProcess As Long, Optional ByVal stringTextBox As String)

If formProgress.Controls.Count = 0 Then Exit Function

' Проверяем, прошел ли интервал времени. Если нет, то не проводим обновление

timeDur = Now - timeStart

If UpdInterval > 0 And (curProcess - prevUpdate) >= UpdInterval Then

prevUpdate = curProcess

ElseIf UpdTimeInterval > 0 And (Round(timeDur / (1 / 24 / 60 / 60), 0) - prevUpdate) >= UpdTimeInterval Then

prevUpdate = Round(timeDur / (1 / 24 / 60 / 60), 0)

Else

Exit Function

End If

 

' обновление формы

For Each cntl In formProgress.Controls

Select Case cntl.Name

Case "bar"

   If Not IsMissing(curProcess) Then

   ' опрежеляем процент выполнения от общего числа процессов

       rat = curProcess / allProcess

   ' устанавливаем ширину элемента для полосы загрузки в определенном проценте от общей ширины для полосы загрузки

       cntl.Width = Round(325 * rat, 2)

   End If

Case "String"

' задаем строку сколько этапов процесса обработано

   If Not IsMissing(curProcess) Then cntl.Caption = "Обработано: " & curProcess & " из " & allProcess & " - " _

                                                       & Round(curProcess / allProcess * 100, 2) & "%"

Case "Duration"

' определяет продолжительность процесса и переводим строку в виде времени

   'h = WorksheetFunction.RoundDown((Now - timeStart) / (1 / 24), 0)

   h = Int((Now - timeStart) / (1 / 24))

   If Len(Trim(CStr(h))) = 1 Then h = "0" & Trim(CStr(h))

   

  ' m = WorksheetFunction.RoundDown(((Now - timeStart) / (1 / 24 / 60)) - h * 60, 0)

   m = Int(((Now - timeStart) / (1 / 24 / 60)) - h * 60)

   If Len(Trim(CStr(m))) = 1 Then m = "0" & Trim(CStr(m))

       

   s = Round((Now - timeStart) / (1 / 24 / 60 / 60) - h * 60 * 60 - m * 60, 0)

   If Len(Trim(CStr(s))) = 1 Then s = "0" & Trim(CStr(s))

       

   timeStr = h & ":" & m & ":" & s

       

   cntl.Caption = "Продолжительность обработки: " & timeStr

Case "Finish"

' определяем оставшееся время исходя из того, сколько прошло до текущего этапа процесса, и сколько этапов осталось

   If Not IsMissing(curProcess) Then

       

           timeOneProcess = timeDur / curProcess ' времени на один этап процесса

               

           remTime = timeOneProcess * (allProcess - curProcess) ' оставшееся время

               

           'h = WorksheetFunction.RoundDown(remTime / (1 / 24), 0)

           h = Int(remTime / (1 / 24))

           If Len(Trim(CStr(h))) = 1 Then h = "0" & Trim(CStr(h))

           

           'm = WorksheetFunction.RoundDown((remTime / (1 / 24 / 60)) - h * 60, 0)

           m = Int((remTime / (1 / 24 / 60)) - h * 60)

           If Len(Trim(CStr(m))) = 1 Then m = "0" & Trim(CStr(m))

           

           s = Round(remTime / (1 / 24 / 60 / 60) - h * 60 * 60 - m * 60, 0)

           If Len(Trim(CStr(s))) = 1 Then s = "0" & Trim(CStr(s))

               

           remTime = h & ":" & m & ":" & s

               

           cntl.Caption = "Оставшееся время обработки: " & remTime

   End If

Case "Text"

' добавляем строку в textbox с переносом, если там уже что-то есть

   If Not IsMissing(stringTextBox) Then

       If cntl.TextLength = 0 Then

           cntl.Text = stringTextBox

       Else

           cntl.Text = cntl.Text & Chr(13) & stringTextBox

       End If

   End If

End Select

Next cntl

 

formProgress.Repaint

DoEvents

 

End Function

Function getForm()

Set getForm = formProgress

End Function

Выйти из VBA и запустить пользовательскую форму кнопкой на панели быстрого доступа (верхний левый угол экрана).

Активизируется пользовательское меню. Нажать на  кнопку “Запуск подбора”.

Появиться окно выбора закодированного файла указать на закодированный файл→ OK .

Программа подбора начнет выполняться, появиться окно выполнения программы (progressbar). По выполнению задачи progressbar исчезнет. Вместо него появиться окно с указанием подобранного пароля и временем подбора в секундах.

Также откроется в новом окне содержимое распароленного файла Word.

При выполнении программы подбора возможно зависание окна progressbar (информация на нем может не меняться), но сама программа подбора будет продолжать выполняться. Это происходит из-за срабатывания системы защиты самой программы Word. На конечный результат подбора пароля это не влияет. В итоге после некоторого ожидания появится окно с паролем и затраченным временем выполнения.

2.Установить четырехзначный цифровой пароль (каждая из цифр от 0 до 5) в контрольный файл MS Office Word.

 

3. С помощью созданной программы подобрать пароль и установить время подбора (сколько паролей в секунду выполняет программа на языке VBA ).

 

4.Дать экспертное заключение на желательную минимальную длину пароля для ценной текстовой информации (посчитать количество вариантов перебора при использованном алфавите с учетом скорости перебора).

 

5. Составить самостоятельно программу подбора трехзначного пароля для ограниченного алфавита (до 10 символов). Необходимо обеспечить ввод этого алфавита вручную при запуске программы.(задание на дом)

 

6. Создать программу криптозащиты ценной текстовой информации для русского прописного и строчного алфавита (метод симметричного ключа ) на языке VBA для MS Office Word 2007/2013.

Для запуска программы необходимо внести следующий код:

В окне (слева от основного) Project Explorer (View → Project Explorer или Ctrl + R) название проекта Project ( Kodtext ) → Module 1→правая кнопка мышки→ View Code . В появившемся окне добавить два блока кода :

 1 .Вставить первый блок в самом верху модуля Module 1 (с него начинается весь код):

 

‘ Код общих исходных данных для генератора шифратора и дешифратора

Public Schet As Byte

Public ParFr, ParFr1, ParFr2 As String 'Строка, зарезервированная под парольную фразу

Dim PriznakM(32) As Byte 'признак, что данная строчная буква основного алфавита уже использована в шифроалфавите

Dim PriznakB(32) As Byte 'признак, что данная прописная буква основного алфавита уже использована в шифроалфавите

Dim SformM As String 'сформированный строчный шифроалфавит по введенной парольной фразе, макросом Generator

Dim SformB As String 'сформированный прописной шифроалфавит по введенной парольной фразе, макросом Generator

Dim ObrM As String 'сформированный обратный строчный шифроалфавит по введенной парольной фразе, макросом Generator

Dim ObrB As String 'сформированный обратный прописной шифроалфавит по введенной парольной фразе, макросом Generator

Dim Povtor As Byte '=0, то запросить парольную фразу, =1, то работать по ранее введенной парольной фразе

Dim buk As Boolean ' =истине, то это маленькая (строчная) буква

Const NALU = "абвгдежзийклмнопрстуфхцчшщъыьэюя" 'нормальный строчный алфавит

Const NAL = "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ" 'нормальный прописной алфавит

 

2.Вставить второй блок в продолжении общего кода (как обычно):

‘ Код для генератора

 

Sub Генератор()

     ' Замена шифроалфавита. В парольной фразе только русские буквы.

    ' Макрос можно вызывать для замены парольной фразы в течении одной сессии.

    ' если его не вызывать, то будет использоваться парольная фраза, введенная при первом шифровании,

    ' либо последняя парольная фраза, введенная через прямой вызов генератора

ParFr = "О сколько нам Открытий чудных готовит Просвещенья Дух"

   'этот участок проверяет начальную или текущую парольную фразу

If Schet = 0 Then ParFr1 = ParFr

ParFr2 = InputBox("", "Введите парольную фразу", ParFr1)

If Len(ParFr2) < 6 Then

MsgBox "Слишком короткая фраза, текущей осталась прежняя парольная фраза"

ParFr2 = ParFr1

                      If Povtor = 1 Then GoTo mm

End If

ParFr1 = ParFr2

Schet = Schet + 1 ' количество парольных фраз за одну сессию

For i = 1 To 32

 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

For j = 1 To 32 ' проверка наличия строчной буквы, иначе проверка на Прописную букву

If Sim1 = Mid(NALU, j, 1) Then buk = True

Next j

If buk = True Then

  For j = 1 To NsformM

  If Sim1 = Mid(SformM, j, 1) Then GoTo m 'эта буква уже есть в сформированном строчном алфавите

  Next j

SformM = SformM + Sim1 ' очередная строчная буква парольной фразы оказалась неиспользованной, добавляем ее в шифроалфавит

IndexM = Asc(Sim1) - Asc("а") + 1 ' определим номер этой строчной буквы в нормальном алфавите

PriznakM(IndexM) = 1 ' занесем признак уже использованной строчной буквы нормального алфавита

NsformM = NsformM + 1 ' кол-во сформированных строчных букв в шифроалфавите

Else

For j = 1 To 32 ' проверка наличия прописной буквы

If Sim1 = Mid(NAL, j, 1) Then buk = True

Next j

If buk = True Then

For j = 1 To NsformB

If Sim1 = Mid(SformB, j, 1) Then GoTo m 'эта буква уже есть в сформированном прописном алфавите

Next j

SformB = SformB + Sim1 ' очередная буква парольной фразы оказалась неиспользованной, добавляем ее в прописной шифроалфавит

IndexB = Asc(Sim1) - Asc("А") + 1 ' определим номер этой буквы в прописном нормальном алфавите

PriznakB(IndexB) = 1 ' занесем признак уже использованной буквы прописного нормального алфавита

NsformB = NsformB + 1 ' кол-во сформированных букв в прописном шифроалфавите

End If

End If

m:

 Next i

' сформировали часть шифроалфавита по парольной фразе

' а теперь надо добавить неиспользованные буквы нормального алфавита по порядку, чтобы шифроалфавит стал полным

For i = 1 To 32

 Sim1 = Mid(NALU, i, 1) ' выбираем i-ую букву из строчного нормального алфавита

If PriznakM(i) = 0 Then 'если буква не использована в строчном шифроалфавите

SformM = SformM + Sim1 ' то добавляем ее туда

IndexM = Asc(Sim1) - Asc("а") + 1 ' определим порядковый номер добавленной буквы

PriznakM(IndexM) = 1 ' занесем признак уже использованной буквы

NsformM = NsformM + 1 ' кол-во сформированных букв в строчном шифроалфавите

End If

Next i

For i = 1 To 32

 Sim1 = Mid(NAL, i, 1) ' выбираем i-ую букву из прописного нормального алфавита

If PriznakB(i) = 0 Then 'если бук



2019-11-13 568 Обсуждений (0)
Порядок выполнения программы Шифрование/Дешифрование текстовых фрагментов документа Word по парольной фразе (симметричный ключ). 0.00 из 5.00 0 оценок









Обсуждение в статье: Порядок выполнения программы Шифрование/Дешифрование текстовых фрагментов документа Word по парольной фразе (симметричный ключ).

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (568)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.013 сек.)