Метод стовпцевих перестановок.

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

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

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

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

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

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра електронних обчислювальних машин Звіт про виконання лабораторної роботи № 5 з курсу „ Захист інформації в комп’ютерних системах ” Метод стовпцевих перестановок Виконав: ст. гр. КІ-4 Львів – 2005 Мета роботи: ознайомитися із методом стовпцевих перестановок та закріпити навики кодування тексту за допомогою цього методу. Завдання: За допомогою алгоритму стовпцевих перестановок закодувати вхідний текст. Текст програми: // Max_ZI5.cpp #include "stdafx.h" #include "stdlib.h" #include "io.h" #include "math.h" void error(); void encrypt(char*,char*); void decrypt(char*,char*); #define max_rows 20 #define max_columns 20 int main(int argc, char* argv[]) { char mode; puts("Stovptsevi peretvotennia. Lab 5 ZI\n *** (C) m@Qs, ki44 2005 ***\n"); if (argc!=4) error(); mode=argv[1][0]; if ( mode=='e') encrypt(argv[2],argv[3]); else if ( mode=='d') decrypt(argv[2],argv[3]); else { error(); } puts("\nDONE!"); return 0; } void encrypt(char* in,char* out) //into bmp { FILE * f_in; // вказівник на вхідний файл FILE * f_out; // вказівник на файл з зашифрованим текстом char ch; // символьна змінна для збереження зчитаних з вхідного файлу символів int txt_length=0; // довжина тексту для шифрування int array_rows=0; // кількість зайнятих рядків в масиві int array_columns=0; // кількість зайнятих стовпців в масиві int tmp; // змінна для проміжних результатів обчислень int i,j; char buf[max_rows][max_rows]; // масив, з допомогою якого здійснюється шифрування // Відкриваємо вхідний та вихідний файли if((f_in=fopen(in,"r")) == NULL) { printf("Unable to open input file %c\n",in); exit(1); } if((f_out=fopen(out,"w")) == NULL) { printf("Unable to open output file %c\n",out); exit(1); } // Визначаємо довжину тексту, який необхідно зашифрувати fscanf(f_in,"%c",&ch); while(!feof(f_in)) { if ( (ch != ' ') && (ch != '\n')) // Пробіли і \n не враховуємо txt_length++; fscanf(f_in,"%c",&ch); } // Довжина тексту не перевищує максимальної? if (txt_length > 400) { printf("Text to encode is too long."); 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')) // пробіли і \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("Everething mixed up ;) Results in %c\n",out); fclose(f_in);// закриваємо усі відкриті файли fclose(f_out); } void decrypt(char* in,char* out) //from bmp { FILE * f_in; // вказівник на вхідний файл FILE * f_out; // вказівник на файл з зашифрованим текстом char ch; // символьна змінна для збереження зчитаних з вхідного файлу символів int i,j; char buf[max_rows][max_rows]; // масив, з допомогою якого здійснюється шифрування тексту // Відкриваємо вхідний та вихідний файли if((f_in=fopen(in,"r")) == NULL) { printf("Unable to open input file %c\n",in); exit(1); } if((f_out=fopen(out,"w")) == NULL) { printf("Unable to open output file %c\n",out); 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 %c\n",out); fclose(f_in);// закриваємо усі відкриті файли fclose(f_out); } void error() { puts("Wrong parameters!\nSYNTAX: maxZI5_full e|d <input file> <output file>"); getchar(); exit(-1); } Результати виконання програми: Вхідний текст: Laboratorna robota n.5 z ZI Зашифрований текст: LaatzatraZboonIorb. rno5 Розшифрований (відновлений) текст: Laboratornarobotan.5zZI Як бачимо, вхідний текст повністю відновлен за виключенням пробілів між словами. Висновок: виконуючи цю лабораторну роботу, я навчився створювати хеш для будь-якої вхідної послідовності за допомогою алгоритму хешування MD5.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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