ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 11.12.2023
Просмотров: 33
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
a25= ((a2a)2)2a.
Таким чином, замість 25 множень виконується всього 6 (тобто 4 зведення квадрат і 2 множення на a). Формально алгоритм виглядає так:
Вхід:aZn і ціле 0k
Вихід:ak mod N.
-
b= 1; -
if k = 0 then return b; -
A= a; -
if k0 = 1 then b = a; -
for i = 1 to t do -
; -
if ki=1 then b = Ab mod N; -
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, ключі головне не міняти на ті, якими кодували, та вказати закодований файл: