Шифрування методом поліалфавітної заміни

Автор работы: Пользователь скрыл имя, 27 Марта 2014 в 02:26, практическая работа

Описание работы

Поліалфавітний шифр (грец. πολύ – багато) -симетричний алгоритм шифрування, який використовує більше ніж один алфавіт. Вони є більш стійкі до зламу, ніж моноалфавітні (шифр Цезаря). До поліалфавітних методів шифрування відносяться, зокрема, шифр Віжинера та шифр Вернама.

Содержание работы

ЗМІСТ
1 ТЕОРЕТИЧНІ ВІДОМОСТІ ПРО ПОЛІАЛФАВІТНІ МЕТОДИ ШИФРУВАННЯ 3
2 ПРИКЛАД РОБОТИ ПРОГРАМИ 6
ВИСНОВКИ 8
ПЕРЕЛІК ПОСИЛАНЬ 9
ДОДАТОК А 10

Файлы: 1 файл

Ликов ЗІ 2.docx

— 362.99 Кб (Скачать файл)

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

Чорноморський державний університет імені Петра Могили

Факультет комп’ютерних наук

 

 

 

ЗВІТ

з практичної роботи №2

 «Шифрування методом поліалфавітної заміни»

Дисципліна «Захист інформації в комп’ютерних системах»

Спеціальність “Системне програмування”

6.050102–ПР.ПЗ.02–406.21010612

 

 

 

 

 

Студент_____________Р. С. Ликов

  (підпис)

____________

  (дата)

 

 Викладач ____________ А. М. Пасхін

(підпис)

                                                                   _____________

  (дата)

 

 

 

 

 

Миколаїв – 2014

ЗМІСТ

 

 

  1. ТЕОРЕТИЧНІ ВІДОМОСТІ ПРО ПОЛІАЛФАВІТНІ МЕТОДИ ШИФРУВАННЯ

 Поліалфавітний шифр (грец. πολύ – багато) -симетричний алгоритм шифрування, який використовує більше ніж один алфавіт. Вони є більш стійкі до зламу, ніж моноалфавітні (шифр Цезаря). До поліалфавітних методів шифрування відносяться, зокрема, шифр Віжинера та шифр Вернама.

Шифр Віженера - поліалфавітний шифр, який у якості ключа використовує слово. Якщо пронумерувати літери алфавіту від 0 до 32 (а → 0, б → 1, в → 2, ...), то шифрування Віженера можна представити формулою

Ci = (Pi + Kj) mod 33,

де Kj - j-та літера ключового слова.

Ключове слово повторюється поки не отримано гаму, рівну довжині повідомлення.

Таблиця 1.1 табичне представлення шифру Віжинера:

 

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

А

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

Б

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

В

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

Г

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

Ґ

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

Д

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

Е

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

Є

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

Ж

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

З

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

И

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

І

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

Ї

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

Й

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

к

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

л

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

м

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

н

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

о

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

п

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

р

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

с

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

т

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

у

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

ф

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

х

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

ц

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ч

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ш

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

щ

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

І

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

ь

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

Ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ю

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

я

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю


Для використання таблиці для шифрування, по вертикалі вибираємо літери відкритого тексту, а по горизонталі – ключа, на перетині цих значень отримуємо знаки шифротексту.

Криптоаналіз виконується так:

1. Знаходиться  довжина ключа. Шифротекст розбивається на групи по номеру літери ключового слова.

2. За  допомогою частотного аналізу  груп знаходяться літери ключа.

У разі якщо відомо частину відкритого тексту, ефективніша атака з відомим відкритим текстом.

З появою ЕОМ набув поширення шифр XOR, який має той самий алгоритм, але використовує алфавіт ACSII. Взагалі, можна зазначити, що у разі невідомості всього алфавіту, який використовувався для шифрування тексту, стійкість до криптоаналізу цього шифру зростає.

У разі якщо ключове слово рівне довжині повідомлення і використовується лише один раз, такий варіант шифра Віженера практично еквівалентний Шифрові Вернама.

Шифр Вернама (інша назва: англ. one-time pad - схема одноразових блокнотів) — у криптографії, система симетричного шифрування, винайдена в 1917 році співробітниками AT&T Мейджором Джозефом Моборном і Гільбертом Вернамом. Шифр Вернама є єдиною системою шифрування, для якої доведена абсолютна криптографічна стійкість.

Для утворення шифртексту повідомлення об'єднується операцією виключної диз’юнкції з ключем (названим одноразовим блокнотом або шифроблокнотом). При цьому ключ повинен володіти трьома критично важливими властивостями:

Бути справді випадковим;

Збігатися з розміром з заданим відкритим текстом;

Застосовуватися тільки один раз.

Шифр названий на честь телеграфіста AT&T Гільберта Вернама, що в 1917 році побудував телеграфний апарат, який виконував цю операцію автоматично – треба було тільки подати на нього стрічку з ключем. Не будучи шифрувальником, тим не менше, Вернам вірно помітив важливу властивість свого шифру - кожна стрічка повинна використовуватися тільки один раз і після цього знищуватися. Це було важко застосувати на практиці - тому апарат був перероблений на кілька зациклених стрічок з взаємно простими періодами.

У 1945 році Клод Шеннон написав роботу (розсекречену лише після Другої світової війни у 1949 р.), в якій довів абсолютну стійкість шифру Вернама. Інших шифрів з цією властивістю не існує. Але дана властивість забезпечується лише за умови використання випадкового ключа, довжина якого дорівнює довжині повідомлення. Це обмеження робить використання шифру недоцільним, оскільки для обміну ключами сторони мають передати по захищеному каналу об’єм інформації, що дорівнює повідомленню (за наявності такого каналу доцільніше одразу передати саме повідомлення).

 

  1. ПРИКЛАД РОБОТИ ПРОГРАМИ

 

 Завдання:

  1. Створити програму для зашифрування файлу
  2. Створити програму для розшифрування файлу

В якості алфавіту використовувати набір символів ASCII-коду (або менший  – кількість символів визначається криптографом).

На вході програми повинен бути файл, після виконання шифрування отримується новий файл.

Шифрування та розшифрування може бути реалізовано в одній програмі, але тоді конкретна дія повинна вибиратися користувачем.

Для спрощення роботи та підвищення функціональності програми, операції не були автоматизовані; тобто, можливо окремо відкрити файл, прочитати зашифрований текст, окремо розшифрувати текст з файлу або введений з клавіатури, та окремо зберегти зашифрований/розшифрований файл. У якості алгоритму шифрування використовувався шифр XOR.

Приклад роботи програми:

Рис. 2.1

 

Рис. 2.2

Приклад вводу невірного ключа:

Рис. 2.3

 

ВИСНОВКИ

  Протягом виконання роботи були розглянуті поліалфавітні методи шифрування, такі як шифр Віжинера, шифр XOR та шифр Вернама. Також була створена програма, яка може шифрувати та розшифровувати файли за допомогою шифру XOR. Також протягом виконання роботи було з’ясовано, що при сучасному рівні розвитку ЕОМ поліалфавітні шифри з поширеними алфавітами є порівняно ненадійні та швидко зламуються.

 

ПЕРЕЛІК ПОСИЛАНЬ

  1. Поліалфавітний шифр // Вікіпедія. - Режим доступу : URL : http://uk.wikipedia.org/wiki/Поліалфавітний_шифр –  Заголовок з екрану.
  2. Шифр Віжинера // Вікіпедія.  - Режим доступу : URL : http://uk.wikipedia.org/wiki/Шифр_Віжинера. –  Заголовок з екрану.

Шифр XOR// Вікіпедія. - Режим доступу : URL :  http://uk.wikipedia.org/wiki/XOR_шифр –  Заголовок з екрану. 
ДОДАТОК А

Код програми: 
class main:

 

#include "mainwindow.h"

#include <QApplication>

 

int main(int argc, char *argv[])

{

    QApplication a(argc, argv);

    MainWindow w;

    w.show();

 

    return a.exec();

}

 

Class mainwindow:

 

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include "shifr.h"

#include "qfiledialog.h"

#include "qmessagebox.h"

#include "QTextCodec"

#include "qtextstream.h"

MainWindow::MainWindow(QWidget *parent) :

    QMainWindow(parent),

    ui(new Ui::MainWindow)

{

    QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));

    ui->setupUi(this);

}

 

MainWindow::~MainWindow()

{

    delete ui;

}

 

void MainWindow::on_pushButton_clicked()

{

    shifr f;

    QString buf = f.workshifr(ui->textEdit->toPlainText(),ui->lineEdit->text(), 1);

    ui->textEdit_2->setText(buf);

}

 

void MainWindow::on_pushButton_2_clicked()

{

    shifr f;

    ui->textEdit_2->setText(f.workshifr(ui->textEdit->toPlainText(),ui->lineEdit->text(), -1));

    /*f.set_starttext(ui->textEdit->toPlainText());

    f.setkay(ui->lineEdit->text());

    ui->textEdit_2->setText(f.getfintext());*/

}

 

void MainWindow::on_action_2_triggered()

{

    QString filew=QFileDialog::getOpenFileName();

    if(filew.size()<=0)

    {

        QMessageBox::warning(0,"Warning", "Файл не выбран");

    }

    QFile filen(filew.replace("\\\"","/"""));//шаманизм с форума

    filen.open(QIODevice::ReadOnly | QIODevice::Text);

    QString buf = QString::QString(filen.readAll());

    ui->textEdit->setText(buf);

    filen.close();

}

 

void MainWindow::on_action_3_triggered()

{

    QString filew=QFileDialog::getSaveFileName();

    if(filew.size()<=0)

    {

        QMessageBox::warning(0,"Warning", "проблема з кінцевим файлом");

    }

    QFile filen(filew.replace("\\\"","/"""));

    QTextStream tend( &filen);

    filen.open(QIODevice::WriteOnly| QIODevice::Text);

    tend<<ui->textEdit_2->toPlainText();

    filen.close();

}

 

Class shifr:

 

#include "shifr.h"

#include <string>

#include <QString>

 

QString intext, outtext, key;

shifr::shifr()

{

}

QString shifr::workshifr(QString inputtext, QString key, int actions)//1 или -1, смотря что надо.

{

    intext=inputtext;

    outtext="";

    shifr::key = key;

    QByteArray S_intext = intext.toLatin1();

    QByteArray S_key = key.toLatin1();

    QByteArray S_outtext = S_intext;

    int j=0;

    for(int i=0;i<S_intext.length();i++)

    {

        if (j==S_key.length()) j=0;

        if (actions ==1)

        {

            S_outtext[i] =  S_outtext[i]+ S_key[j];

        }

        else

        {

            S_outtext[i] =  S_outtext[i]- S_key[j];

        }

 

        j++;

    }

    outtext = QString::fromLatin1(S_outtext.constData());

    return outtext;

}

 


Информация о работе Шифрування методом поліалфавітної заміни