Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
УІ
Кафедра:
Не вказано

Інформація про роботу

Рік:
2012
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Криптографія

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» / ЗВІТ до лабораторної роботи №2 з курсу: «Криптографія і стеганографія» Мета роботи: дослідити метод матричного обходу,виявити його переваги і недоліки і написати програму для за шифрування і розшифрування повідомлень даним методом Короткі теоретичні відомості Лінійний шифр третього порядку Ключ: а таке, що 0 < а < п і НСД (а, п) = 1. Шифрування. У повідомленні кожна буква х заміщується буквою Е{х) = (ах) mod n. Дешифрування. У криптотексті кожна буква х' заміщується буквою D(x') = (a'x') mod п, де а' — a-1 mod n — дешифруючий ключ. Ключовий простір для лінійного шифру k-го порядку збігається з безліччю оборотних матриць k-го порядку над Z. Ця кількість оцінюється значенням узагальненої функції Ейлера: , де  Блок – схема    Код програми using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; namespace WindowsFormsApplication4 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } int[, ,] statM = new int[3, 3, 3]; int[, ,] MatrixMul; int[, ,] bla; int global_size2; int global_size; bool global_bool; private void Form1_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { int size = textBox5.Text.Length; global_size2 = size; char[] line = textBox5.Text.ToCharArray(); int num_rows; bool divide = false; if (size % 2 == 0) num_rows = size / 2; else { num_rows = size / 2 + 1; divide = true; } bla = new int[3, 3, num_rows]; int [, ,] text = new int[3, 3, num_rows]; global_size = num_rows; global_bool = divide; //To matrix int k = 0; for (int j = 0; j < num_rows; j++) { for (int i = 0; i < 3; i++) { for (int l = 0; l < 3; l++) { if (divide == true && k == size) break; text[l, i, j] = Convert.ToInt32(line[k]) - 1039; k++; } } } //multiplie statM[0, 0, 0] = Convert.ToInt32(textBox1.Text); statM[0, 0, 1] = Convert.ToInt32(textBox2.Text); statM[0, 1, 0] = Convert.ToInt32(textBox3.Text); statM[0, 1, 1] = Convert.ToInt32(textBox4.Text); statM[1, 0, 0] = Convert.ToInt32(textBox6.Text); statM[1, 0, 1] = Convert.ToInt32(textBox7.Text); statM[1, 1, 0] = Convert.ToInt32(textBox8.Text); statM[1, 1, 1] = Convert.ToInt32(textBox9.Text); statM[0, 0, 2] = Convert.ToInt32(textBox10.Text); MatrixMul = mulMatrix(statM, text); //to text; k = 0; for (int j = 0; j < num_rows; j++) { for (int i = 0; i < 3; i++) { for (int l = 0; l < 3; l++) { if (divide == true && k == size) { break; } line[k] = Convert.ToChar(MatrixMul[l, i, j]+1039); k++; } } } string f = new string (line); label1.ResetText(); label1.Text = f; //label1.Text = Convert.ToString(num_rows); } private int[, ,] mulMatrix(int[, ,] a, int[, ,] b) { int[, ,] r = new int[3, 3, global_size]; for (int i = 0; i < 3; i++) { for (int j = 0; j < global_size; j++) { for (int k = 0; k < 3; k++) { for (int l = 0; l < 3; l++) { r[l, i, j] += a[l, i, k] * b[l, k, j]; } } } } for (int i = 0; i < 3; i++) { for (int j = 0; j < global_size; j++) { for (int l = 0; l < 3; l++) { bla[i, l, j] = r[l, i, j] / 33; r[l, i, j] = r[l, i, j] % 33; } } } return r; } //reverse function private double[, ,] mulMatrix(double[, ,] a, int[, ,] b) { double[, ,] r = new double[3, 3, global_size]; for (int i = 0; i < 3; i++) { for (int j = 0; j < global_size; j++) { for (int k = 0; k < 3; k++) { for (int l = 0; l < 3; l++) { r[l, i, j] += a[l, i, k] * b[l, k, j]; } } } } for (int i = 0; i < 3; i++) { for (int j = 0; j < global_size; j++) { for (int l = 0; l < 3; l++) { r[l, i, j] = r[l, i, j] % 33; } } } return r; } private void button2_Click(object sender, EventArgs e) { int a = ((statM[0, 0, 0] * statM[1, 0, 0] * statM[0, 0, 2])+(statM[0, 0, 1] * statM[1, 0, 1] * statM[1, 1, 0])+(statM[0, 1, 0]*statM[0, 1, 1]*statM[1, 1, 1])); int b = ((statM[0, 1, 0]*statM[1, 0, 0]*statM[1, 1, 0])+(statM[0, 0, 0]*statM[1, 0, 1]*statM[1, 1, 1])+(statM[0, 0, 1]*statM[0, 1, 1]*statM[0, 0, 2])); a = a - b; double zzz = 1.0 / a; double[, ,] temp = new double[3, 3, 3]; temp[0, 0, 0] = Convert.ToDouble(statM[0, 0, 2]); temp[0, 0, 1] = -(Convert.ToDouble(statM[0, 0, 1])); temp[0, 1, 0] = -(Convert.ToDouble(statM[1, 1, 0])); temp[0, 1, 1] = -(Convert.ToDouble(statM[0, 1, 1])); temp[1, 0, 0] = Convert.ToDouble(statM[1, 0, 0]); temp[1, 0, 1] = -(Convert.ToDouble(statM[1, 0, 1])); temp[1, 1, 0] = -(Convert.ToDouble(statM[0, 1, 0])); temp[1, 1, 1] = -(Convert.ToDouble(statM[1, 1, 1])); temp[0, 0, 2] = Convert.ToDouble(statM[0, 0, 0]); temp[0, 0, 0] *= zzz; temp[0, 0, 1] *= zzz; temp[0, 1, 0] *= zzz; temp[0, 1, 1] *= zzz; temp[1, 0, 0] *= zzz; temp[1, 0, 1] *= zzz; temp[1, 1, 0] *= zzz; temp[1, 1, 1] *= zzz; temp[0, 0, 2] *= zzz; for (int i = 0; i < 3; i++) { for (int j = 0; j < global_size; j++) { for (int l = 0; l < 3; l++) { MatrixMul[l, i, j] = MatrixMul[l, i, j] + bla[l, i, j] * 33; } } } double[, ,] getb = mulMatrix(temp, MatrixMul); int k = 0; char[] zu = new char[global_size2]; for (int j = 0; j < global_size; j++) { for (int i = 0; i < 3; i++) { for (int l = 0; l < 3; l++) { if (global_bool == true && k == global_size2) break; zu[k] = Convert.ToChar((Convert.ToInt32(getb[l, i, j]))+1039); k++; } } } string f = new string(zu); f = textBox5.Text; label2.ResetText(); label2.Text = f; } } } Результати роботи програми / Висновок: Лінійний шифр третього порядку є більш стійкий до розшифрування крипто аналітиками, це пояснюється способом його утворення, але все одно він піддається частотному аналізу.
Антиботан аватар за замовчуванням

18.09.2013 12:09-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!