Файл: Лабораторна робота 1.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 11.12.2023

Просмотров: 33

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


a25= ((a2a)2)2a.

Таким чином, замість 25 множень виконується всього 6 (тобто 4 зведення квадрат і 2 множення на a). Формально алгоритм виглядає так:

Вхід:aZn і ціле 0k .

Вихід:ak mod N.

  1. b= 1;

  2. if k = 0 then return b;

  3. A= a;

  4. if k0 = 1 then b = a;

  5. for i = 1 to t do

  6. ;

  7. if ki=1 then b = Ab mod N;

  8. return b.

На практиці зазвичай використовується K = 3, у цьому випадку необхідно, щоб ні P - 1, ні Q - 1 не ділилися на 3. При такому відкритому ключі операція шифрування виходить дуже швидкою і вимагає одне зведення квадрат і одне модульне множення (або 2 модульні множення - залежно від реалізації). Іншим часто використовуваним значенням є K = 216 + 1 = 65537Це число має дві одиниці в двійковому записі і вимагає, при використанні описаного алгоритму, 16 зведень квадрат і одне модульне множення. Така експонента має перевагу проти K = 3, оскільки у разі атака, описана раніше, не здійснитися, т.к. дуже мала ймовірність, що те саме повідомлення буде надіслано 216 + 1 абонентам.



Рис. 6.2. Діаграма компонентів програми організації захищеного документу

Розробка екранних форм введення-виведення та звітів



Лістинг програмного коду виконання завдання:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using iTextSharp.text.pdf;
namespace iTextSharpSign

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void debug(string txt)

{

DebugBox.AppendText(txt + System.Environment.NewLine);

}
private void button4_Click(object sender, EventArgs e)

{

System.Windows.Forms.OpenFileDialog openFile;

openFile = new System.Windows.Forms.OpenFileDialog();

openFile.Filter = "PDF files *.pdf|*.pdf";

openFile.Title = "Select a file";

if (openFile.ShowDialog() != DialogResult.OK)

return;
inputBox.Text = openFile.FileName;

PdfReader reader = new PdfReader(inputBox.Text);
MetaData md = new MetaData();

md.Info = reader.Info;
authorBox.Text = md.Author;

titleBox.Text = md.Title;

subjectBox.Text = md.Subject;

kwBox.Text = md.Keywords;

creatorBox.Text = md.Creator;

prodBox.Text = md.Producer;
}
private void button5_Click(object sender, EventArgs e)

{

System.Windows.Forms.SaveFileDialog saveFile;

saveFile = new System.Windows.Forms.SaveFileDialog();

saveFile.Filter = "PDF files (*.pdf)|*.pdf";

saveFile.Title = "Save PDF File";

if (saveFile.ShowDialog() != DialogResult.OK)

return;

outputBox.Text = saveFile.FileName;
}
private void button2_Click(object sender, EventArgs e)

{

System.Windows.Forms.OpenFileDialog openFile;

openFile = new System.Windows.Forms.OpenFileDialog();

openFile.Filter = "Certificate files *.pfx|*.pfx";

openFile.Title = "Select a file";

if (openFile.ShowDialog() != DialogResult.OK)


return;
certTextBox.Text = openFile.FileName;
}
private void button1_Click(object sender, EventArgs e)

{

debug("Started ...");
debug("Checking certificate ...");

Cert myCert=null;

try

{

myCert = new Cert(certTextBox.Text, passwordBox.Text);

debug("Certificate OK");

}

catch (Exception ex)

{

debug("Error : please make sure you entered a valid certificate file and password");

debug("Exception : "+ex.ToString());

return;

}

debug("Creating new MetaData ... ");
//Adding Meta Datas

MetaData MyMD = new MetaData();

MyMD.Author = authorBox.Text;

MyMD.Title = titleBox.Text;

MyMD.Subject = subjectBox.Text;

MyMD.Keywords = kwBox.Text;

MyMD.Creator = creatorBox.Text;

MyMD.Producer = prodBox.Text;

debug("Signing document ... ");

PDFSigner pdfs = new PDFSigner(inputBox.Text, outputBox.Text, myCert, MyMD);

pdfs.Sign(Reasontext.Text, Contacttext.Text, Locationtext.Text, SigVisible.Checked, Convert.ToInt32(X.Text.ToString().Trim()), Convert.ToInt32(Y.Text.ToString().Trim()), Convert.ToInt32(X1.Text.ToString().Trim()), Convert.ToInt32(Y1.Text.ToString().Trim()), checkBox1.Checked, checkBox2.Checked, checkBox3.Checked,radioButton2.Checked);

pdfs.Verify();

debug("Done :)");
}
private void checkBox1_CheckedChanged(object sender, EventArgs e)

{

if (checkBox1.Checked == true)

{

Reasontext.Enabled = false;

}

if (checkBox1.Checked == false)

{

Reasontext.Enabled = true;

}

}
private void checkBox2_CheckedChanged(object sender, EventArgs e)

{

if (checkBox2.Checked == true)

{

Contacttext.Enabled = false;

}

if (checkBox2.Checked == false)

{

Contacttext.Enabled = true;

}

}
private void checkBox3_CheckedChanged(object sender, EventArgs e)

{

if (checkBox3.Checked == true)

{

Locationtext.Enabled = false;

}

if (checkBox3.Checked == false)

{

Locationtext.Enabled = true;

}

}
private void radioButton2_CheckedChanged(object sender, EventArgs e)

{

if (radioButton2.Checked == true)

{

Reasontext.Enabled=false;

Contacttext.Enabled=false;

Locationtext.Enabled = false;

checkBox1.Checked = true;

checkBox2.Checked = true;

checkBox3.Checked = true;
}

}
private void radioButton1_CheckedChanged(object sender, EventArgs e)

{

Reasontext.Enabled = true;

Contacttext.Enabled = true;

Locationtext.Enabled = true;

checkBox1.Checked = false;

checkBox2.Checked = false;

checkBox3.Checked = false;

}

}

}

Програмна реалізація криптосистеми підпису документа складається з 4 основних класів:

  • Form1 – основна форма програми;

  • PDFSigner - містить методи відкриття файлу, вбудовування елементів підпису у файл, збереження інформації;

  • Cert – клас обробки даних сертифіката, що використовується для читання даних та вилучення парольної інформації;

  • Resources –клас для організації вилучення стандартних ресурсів проекту;

  • MetaData – клас для організації структури, яка є підсумковий набір даних для організації підпису документів;

  • Setting – клас організації зміни налаштувань програми;

  • Program – основний програмний клас програмного проекту.




Рис. 6.3. Інтерфейс програми для впровадження цифрового підпису




Рис. 6.4. Елементи головного вікна програми
Компоненти головної форми програми:



Назва компонента

Тип компонента

Призначення

1

Автор

TextBox

Текстове поле введення автора підпису

2

Найменування

TextBox

Текстове поле для введення найменування документа

3

Тема

TextBox

Текстове поле для введення теми документа

4

Тег-слова

TextBox

Текстове поле для введення слів опису

5

Джерело

TextBox

Текстове поле для введення джерела документа

6

Подробиці

TextBox

Текстове поле введення подробиць

7

Вимкнути

checkBox

Режими включення-відключення додавання додаткової інформації до документа

8

Опис

TextBox

Текстове поле для введення опису вмісту

9

Контакти

TextBox

Текстове поле для введення контактних даних

10

Локація

TextBox

Текстове поле для введення даних про локацію даних

11

Виконати підпис

Button

Кнопка запуску цифрового підпису документа

12

Зробити цифровий підпис видимим

checkBox

Увімкнення-вимкнення режиму відображення підпису в документі

13

Розміщення цифрового підпису у документі

TextBox

Текстові поля для введення координат розміщення підпису щодо сторінки документа

14

Джерело

TextBox

Текстове поле відображення шляху документа

15

Результат

TextBox

Текстове поле відображення розміщення результату підпису

16

Сертифікат

TextBox

Текстове поле відображення шляху файлу сертифіката підпису (ключів)

17

Пароль

TextBox

Текстове поле введення даних про пароль кодування-декодування

18

Відкрити

Button

Кнопка діалогу відкриття файлу для підпису

19

Вказати

Button

Кнопка запуску вказівки розташування файлу після підпису

20

Відкрити

Button

Кнопка запуску діалогу відкриття файлу сертифіката




Інтерфейс графічного додатка для впровадження цифрового підпису в документ має такий вигляд:



Рис. 6.5. Інтерфейс програми для впровадження цифрового підпису
При запуску програми для генерування ключів кнопка Generate Key, потім вибирається Encrypt для кодування:



Рис. 6.6. Інтерфейс програми для формування ключів
Вказуємо файл для кодування:



Рис. 6.7. Відкриття даних кодування

Поточні процедури відображаються у консольному вікні:



Рис. 6.8. Виконання шифрації
Результат кодування в окремому файлі з розширенням enc:



Рис. 6.9. Результат шифрації
Для декодування натискаємо кнопку Decrypt, ключі головне не міняти на ті, якими кодували, та вказати закодований файл: