Стовпцевий шифр

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

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

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

Рік:
2005
Тип роботи:
Лабораторна робота
Предмет:
Захист інформації
Група:
КІ

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” КАФЕДРА ЕЛЕКТРОННИХ ОБЧИСЛЮВАЛЬНИХ МАШИН Лабораторна робота №5 з курсу “Захист інформації” на тему: “Стовпцевий шифр” Мета роботи: зашифрувати стовпцевим шифром довільне повідомлення. Теоретичні відомості Шифри перестановки В перестановочному шифрі змінюється не відкритий текст, а порядок символів. В простому стовпцевому перестановочному шифрі відкритий текст пишеться горизонтально на розграфленому листку паперу фіксованої ширини, а шифротекст зчитується по вертикалі. Дешифрування являє собою запис шифротексту вертикально на листку розграфленого паперу фіксованої ширини і потім зчитування відкритого тексту горизонтально. Криптоаналіз Так як символи шифротексту ті ж, що і в відкритому тексті, частотний аналіз шифротексту покаже, що кожна буква зустрічається приблизно з такою ж частотою, що й зазвичай. Це дасть криптоаналітику можливість застосувати різні методи, визначаючи правильний порядок символів для отримання відкритого тексту. Текст програми: Програма, що шифрує повідомлення: // Лабораторна робота №5 з Захисту інформації // Виконала: ст.гр.КІ-47 Фірсова Юлія // Програма виконує шифрування тексту, що знаходиться в файлі text.txt // стовпцевим методом і виводить зашифрований текст в файл output.txt #include <stdio.h> #include <stdlib.h> #include <math.h> #define max_rows 20 // максимальна кількість рядків в масиві #define max_columns 20 // максимальна кількість стовпців в масиві int main() { FILE * f_in; // вказівник на вхідний файл FILE * f_out; // вказівник на файл з зашифрованим текстом char ch; // символьна змінна для збереження зчитаних з вхідного файлу символів int txt_length=0; // довжина тексту для шифрування ( початкове значення дор. 0) int array_rows=0; // кількість зайнятих рядків в масиві int array_columns=0; // кількість зайнятих стовпців в масиві int tmp; // змінна для проміжних результатів обчислень int i,j; // лічильники циклу char buf[max_rows][max_rows]; // масив, з допомогою якого здійснюється шифрування тексту // Відкриваємо вхідний та вихідний файли if((f_in=fopen("text.txt","r")) == NULL) { printf("Unable to open input file text.txt\n"); exit(1); } if((f_out=fopen("output.txt","w")) == NULL) { printf("Unable to open output file output.txt\n"); exit(1); } // Визначаємо довжину тексту, який необхідно зашифрувати fscanf(f_in,"%c",&ch); while(!feof(f_in)) { // Пробіли і символи переходу на новий рядок не враховуємо if ( (ch != ' ') && (ch != '\n')) txt_length++; fscanf(f_in,"%c",&ch); } // Довжина тексту не перевищує максимальної? if (txt_length > 400) { printf("Text to encode is too long. Please input the shorter text, and run this program again. Bye!"); exit(1); } // Знову відкриваємо вхідний файл для читання спочатку fclose(f_in); f_in=fopen("text.txt", "r"); // Визначення кількості рядків і стовпців масиву, які будуть зайняті текстом array_rows = sqrt(txt_length); array_columns = array_rows; tmp = txt_length - array_rows*array_rows; if ( tmp >= array_rows) { array_rows++; array_columns++; } else if( tmp>0) array_columns++; // Початкове обнулення масиву for (i=0; i<max_rows; i++) { for (j=0; j<max_columns; j++) { buf[i][j]=0; } } // Запис даних з файлу в масив порядково fscanf(f_in,"%c",&ch); for (i=0; i<=array_rows-1; i++) { for (j=0; j<=array_columns-1; j++) { while ( (ch == ' ') || (ch == '\n'))// пробіли і символу переходу на новий // рядок не враховуємо { if (!feof(f_in)) // читаємо з файлу символи доки не // зустрінемо букву або цифру fscanf(f_in,"%c",&ch); // записуємо його в змінну ch } if (!feof(f_in)) { // записуємо вміст ch в відповідну комірку масиву buf[i][j]=ch; fscanf(f_in,"%c",&ch); } } } // Вивід масиву по стовпцях в вихідний файл for (i=0; i<=array_rows-1; i++) { for (j=0; j<=array_columns-1; j++) { fprintf(f_out,"%c",buf[j][i]); } fprintf(f_out," "); } printf("Finished. See encripted text in output.txt\n"); fclose(f_in);// закриваємо усі відкриті файли fclose(f_out); return 0; } Програма, що дешифрує повідомлення, зашифроване стовпцевим методом: // Лабораторна робота №5 з Захисту інформації // Виконала: ст.гр.КІ-47 Фірсова Юлія // Програма виконує дешифрування тексту, що знаходиться в файлі output.txt // і зашифрований стовпцевим методом і виводить розшифрований текст в файл decripted.txt // (розшифрований текст записується без пробілів) #include <stdio.h> #include <stdlib.h> #include <math.h> #define max_rows 20 // максимальна кількість рядків в масиві #define max_columns 20 // максимальна кількість стовпців в масиві int main() { FILE * f_in; // вказівник на вхідний файл FILE * f_out; // вказівник на файл з зашифрованим текстом char ch; // символьна змінна для збереження зчитаних з вхідного файлу символів int i,j; // лічильники циклу char buf[max_rows][max_rows]; // масив, з допомогою якого здійснюється шифрування тексту // Відкриваємо вхідний та вихідний файли if((f_in=fopen("output.txt","r")) == NULL) { printf("Unable to open input file text.txt\n"); exit(1); } if((f_out=fopen("decripted.txt","w")) == NULL) { printf("Unable to open output file output.txt\n"); exit(1); } // Початкове обнулення масиву for (i=0; i<max_rows; i++) { for (j=0; j<max_columns; j++) { buf[i][j]=0; } } // Запис даних з файлу в масив по стовпчикам fscanf(f_in,"%c",&ch); for (i=0; i<max_rows; i++) { for (j=0; j<max_columns; j++) { if ((ch != ' ') && (ch != '\n') && (ch != 0)) { if (!feof(f_in)) { // записуємо вміст ch в відповідну комірку масиву buf[j][i]=ch; fscanf(f_in,"%c",&ch); } } else { fscanf(f_in,"%c",&ch); break; } } } // Вивід масиву по рядках в вихідний файл for (i=0; i<max_rows; i++) { for (j=0; j<max_columns; j++) { if(buf[i][j] != 0) fprintf(f_out,"%c",buf[i][j]); } } printf("Finished. See decripted text in decripted.txt\n"); fclose(f_in);// закриваємо усі відкриті файли fclose(f_out); return 0; } Результати роботи програми Текст, що необхідно зашифрувати: One small step for a man is just one giant leap for a mankind Проміжне представлення тексту: onesmal lstepfo ramanis justone giantle apforam ankind Зашифрований текст: Olrjgaa nsauipn etmsafk seatnoi mpnotrn afinlad loseem Висновки: під час виконання лабораторної роботи №5 було проведено розробку програми для шифрування повідомлень стовпцевим методом, а також програми, яка розшифровує повідомлення, зашифроване цим методом.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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