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

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

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

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

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

МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» / ЗВІТ до лабораторної роботи №1 з курсу: «Криптографія і стеганографія» Мета роботи: дослідити метод матричного обходу,виявити його переваги і недоліки і написати програму для за шифрування і розшифрування повідомлень даним методом Короткі теоретичні відомості Матричний шифр обходу. Повідомлення записується рядками у вигляді прямокутної матриці. Криптотекст формується зчитуванням букв із матриці у зміненому порядку, а саме, стовпчиками. При цьому послідовність, у якій зчитуються стовпчики, визначається ключем. Було поширеним задання ключа у вигляді ключового слова, що легко запам’ятовувалось. Порядок зчитування стовпчиків збігався з алфавітним порядком букв ключового слова. «FXADFAXGVAGXXGGFXGADAVAVXGGFFFFFXGADDAADVXVXADFD». Нехай ключове слово є «GARDEN». Тепер застосуємо до отриманого текстуматричний шифр обходу: 4 1 6 2 3 5 G A R D E N F X A D F A X G V A G X X G G F X G A D A V A V X G G F F F F F X G A D D A A D V X V X A D F D Тепер, зчитуючи стовпці отриманої матриці відповідно зі старшинством букв ключового слова і розбиваючи текст на блоки, отримуємо остаточно шифротекст: «XGGDG FAXDA FVFGD DFGXA FAVFF XXAXF DVAXG VFDXD AVGAG XAA». Алгоритм методу    Код програми using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; namespace Lab1__AutoKey_ { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void openToolStripMenuItem_Click(object sender, EventArgs e) { try { FileStream fs = null; OpenFileDialog ofd = new OpenFileDialog(); ofd.InitialDirectory = "c:\\"; ofd.Filter = "txt (*.txt)|*.txt|All files (*.*)|*.*"; ofd.FilterIndex = 1; ofd.RestoreDirectory = true; if (ofd.ShowDialog() == DialogResult.OK) { try { fs = new FileStream(ofd.FileName, FileMode.Open); } catch (FileNotFoundException ex) { MessageBox.Show(ex.Message, "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error); } fs.Close(); textBox_input.Text = File.ReadAllText(ofd.FileName, Encoding.ASCII); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void exitToolStripMenuItem_Click(object sender, EventArgs e) { Application.Exit(); } private void encryptToolStripMenuItem_Click(object sender, EventArgs e) { int row, column; string text = textBox_input.Text; string open_txt = text.Replace(" ", ""); char[] open_txt_chars = open_txt.ToCharArray(); text = textBox_key.Text; char[] key = text.ToCharArray(); char[] sorted_key = new char[key.Length]; Array.Copy(key, sorted_key, key.Length); Array.Sort(sorted_key); if ((row = open_txt_chars.Length / key.Length) != 0) row++; column = key.Length; char[,] all_text = new char[row, column]; char[] encr_chars = new char[row*column]; int k = 0; for (int i = 0; i < row; i++) { for (int j = 0; j < column; j++) { if (k >= open_txt_chars.Length) all_text[i, j] = ' '; else { all_text[i, j] = open_txt_chars[k]; } k++; } } int indx; k=0; for (int j = 0; j < column; j++) { indx = Array.IndexOf(key, sorted_key[j]); for (int i = 0; i < row; i++) { encr_chars[k] = all_text[i, indx]; k++; } } text = new string(encr_chars); textBox_output.Text = text; } private void decryptToolStripMenuItem_Click(object sender, EventArgs e) { int row, column, k; string text = textBox_input.Text; char[] encr_txt_chars = text.ToCharArray(); text = textBox_key.Text; char[] key = text.ToCharArray(); char[] sorted_key = new char[key.Length]; Array.Copy(key, sorted_key, key.Length); Array.Sort(sorted_key); row = encr_txt_chars.Length / key.Length; column = key.Length; char[,] all_text = new char[row, column]; char[] decr_chars = new char[row * column]; int indx; k = 0; for (int j = 0; j < column; j++) { indx = Array.IndexOf(key, sorted_key[j]); for (int i = 0; i < row; i++) { all_text[i, indx]= encr_txt_chars[k] ; k++; } } k = 0; for (int i = 0; i < row; i++) { for (int j = 0; j < column; j++) { decr_chars[k] = all_text[i, j]; k++; } } text = new string(decr_chars); text = text.TrimEnd(); textBox_output.Text = text; } private void saveOutputToolStripMenuItem_Click(object sender, EventArgs e) { try { SaveFileDialog saveFileDialog1 = new SaveFileDialog(); saveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"; saveFileDialog1.FilterIndex = 1; saveFileDialog1.RestoreDirectory = true; if (saveFileDialog1.ShowDialog() == DialogResult.OK) { StreamWriter myStream = new StreamWriter(saveFileDialog1.FileName, false, Encoding.ASCII); myStream.Write(textBox_output.Text); myStream.Close(); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void cleanAllFieldsToolStripMenuItem_Click(object sender, EventArgs e) { textBox_input.Text = ""; textBox_key.Text = ""; textBox_output.Text = ""; } private void Form1_Load(object sender, EventArgs e) { } } } Результати роботи програми / / Висновок: Метод матричного обходу для зашифрування повідомлень є нескладним для програмної реалізації. Недоліком методу є те, що його можна легко взламати методом перебору, тільки це може зайняти багато часу, якщо довжина повідомлення значно перевищує довжину ключа.
Антиботан аватар за замовчуванням

18.09.2013 12:09-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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