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

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

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

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

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

МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» / ЗВІТ до лабораторної роботи №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:54

Коментарі

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

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

Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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