DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

DevioLab підбирає стратегії, відстежує ринки та автоматизує купівлю і продаж активів. Кількість доступних криптовалют, акцій і торгових можливостей зростає щодня.

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

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

Оригінальна назва роботи

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

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

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

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

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

Про що ця робота

У лабораторній роботі розроблено програму для шифрування та дешифрування повідомлень стовпцевим методом на мові С. Наведено приклади роботи програми та результати шифрування тестового тексту.

У роботі розглядаються

  • Симетричне шифрування
  • Шифри перестановки
  • Криптоаналіз
  • Програмування на Сі
  • Робота з файлами

Зміст і розділи

  1. Мета роботи
  2. Теоретичні відомості
  3. Текст програми
  4. Результати роботи програми
  5. Висновки
Для кого:Студенти технічних спеціальностей та вивчаючі криптографію.
Викладачі:Не вказано

Ключові поняття

шифр перестановкикриптоаналізшифротекстдешифруваннявідкритий текстмасивфайловий ввід-вивідчастотний аналізмова Сі

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ національний університет “Львівська політехніКА” КАФЕДРА ЕЛЕКТРОННИХ ОБЧИСЛЮВАЛЬНИХ МАШИН Лабораторна робота №5 з курсу “Захист інформації” на тему: “Стовпцевий шифр” Львів-2005 Мета роботи: зашифрувати стовпцевим шифром довільне повідомлення. Теоретичні відомості Шифри перестановки В перестановочному шифрі змінюється не відкритий текст, а порядок символів. В простому стовпцевому перестановочному шифрі відкритий текст пишеться горизонтально на розграфленому листку паперу фіксованої ширини, а шифротекст зчитується по вертикалі. Дешифрування являє собою запис шифротексту вертикально на листку розграфленого паперу фіксованої ширини і потім зчитування відкритого тексту горизонтально. Криптоаналіз Так як символи шифротексту ті ж, що і в відкритому тексті, частотний аналіз шифротексту покаже, що кожна буква зустрічається приблизно з такою ж частотою, що й зазвичай. Це дасть криптоаналітику можливість застосувати різні методи, визначаючи правильний порядок символів для отримання відкритого тексту. Текст програми: Програма, що шифрує повідомлення: // Лабораторна робота №5 з Захисту інформації // Програма виконує шифрування тексту, що знаходиться в файлі 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 з Захисту інформації // Програма виконує дешифрування тексту, що знаходиться в файлі 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 було проведено розробку програми для шифрування повідомлень стовпцевим методом, а також програми, яка розшифровує повідомлення, зашифроване цим методом.
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

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

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

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

Admin

26.02.2023 12:38

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