Програма coDec
Визнач число до і послідовність чисел від 1 до до 1 ...... к. Необхідно
зашифрувати літерні послідовність, що знаходиться у файлі відповідно до
введеної послідовністю. Вихідні дані записати у файл. Наприклад, якщо до
дорівнює 4 і послідовність S3, S2, S4, S1 то символи S1, S1, S3, S4 перетворюються в
S3, S2, S4, S1. Якщо кількість символів не кратно к, то в кінці послідовності
необхідно додати пробіли.
2. Опис застосування
2.1. Призначення програми
Програма coDec призначена для шифрування і дешифрування символьного масиву,
що знаходиться у файлі.
2.2. Умови застосування
Програма висуває дуже скромні вимоги до ресурсів обчислювальної
установки. Тим не менш, у разі потреби будуть використані для компіляції і
складання програми С на машинах типу PC необхідно мати 8Мбайт оперативної
пам'яті. Програма в змозі брати з будь-якого каталогу файли і також записувати
файли в довільну директорію, вказану вами. Проте не слід нехтувати
загальними принципами шифрування і дешифрування інформаційних даних, тобто
сприймати цю працю як панацею захисту від сторонніх осіб. Будь-яка
закодована порція даних може бути з легкістю перетворена у вихідний
текст підбором ключа, шляхом перестановки літер для знаходження логічного
варіанту.
Опис завдання
Завдання, поставлене на практиці, полягала в необхідності набору якогось числа
до і послідовності 1 ..... до, і перегрупування символьного масиву з одного
файлу в символьний масив іншого файлу, відповідно до раніше введеної
послідовністю.
Кодування досягається наступним чином: з символьного масиву файлу
джерела послідовно беруться символи і записуються в новий символьний
масив В [] (B [i +1] = c), далі з цього масиву відбувається також послідовно
запис у файл, за винятком того, що індекси записуваних символів рівні
послідовності (B [pointer], де pointer дорівнює масиву послідовності).
Декодування: принцип роботи декодування протилежний кодування і складається
в тому, що новому масиву В [] з індексами послідовності присвоюються
Прочитувані символи (B [pointer] = c), а потім здійснюється запис цього масиву,
але вже з індексами від 1 до к (B [i +1]).
3.Опісаніе програми
3.1.Общіе відомості
Програма coDec призначена для шифрування і дешифрування символьного масиву,
що знаходиться у файлі.
Для виконання програми достатньо обчислювальної установки типу PC з
процесором i386 і вище і 8 Мбайт оперативної пам'яті, оснащеної будь-який з
наступних операційних систем: MS DOS (починаючи з версії 5.0), Windows 95,
Windows NT версій 4.0.
Програма coDec написана на мові Visual C + +, реалізований, наприклад, в
компіляторі MS Developer Studio v.4.2 для операційних систем Windows NT і
Windows 95.
3.2. Функціональне призначення
Програма застосовується для шифрування або дешифрування даних з одного файлу в
інший. Однак не будь-яке поєднання вихідних даних дозволяє отримати бажаний
результат, наприклад, не рекомендується завантажувати *. exe та інші файли, які мають у
своїй структурі крім текстових даних, спецсимволи, в деяких випадках
сприймаються програмою як кінець файлу.
3.3. Опис логічної структури
Примітки виду "см. Текст", що зустрічаються в цьому розділі, означають посилання на
документ "Текст програми".
Опис головний програми
У Розділі 1 (див. Текст) проводиться подлключеніе стандартних бібліотек
компілятора для забезпечення функціонування окремих операторів і всієї
програми в цілому.
У Розділі 2 (див. Текст) здійснюється опис змінних.
У Розділі 3 (див. Текст) проводиться вибір подальшої дії програми:
кодування (0) або декодування (1) літерний послідовності, що міститься
у вихідному файлі, у вихідний файл.
Конструкція while (1) забезпечує постійне виконання циклу до тих пір, поки
не виконається умова if, яке перериває його дію оператором break.
У Розділі 4 знаходиться цикл введення довжини кодової послідовності, який
автоматично перевіряє умова правильності введеного значення.
Повідомлення "Error! K must be integer from 1 to 10" означає, що введений вами
символ не задовольняє вимогам і необхідно повторити введення заново.
У Розділі 5 організовано цикл послідовності з перевіркою обчислення
контрольної суми, шляхом підрахунку введеної суми і суми з масиву W [] с
подальшим порівнянням обох результатів. Якщо суми не збігаються, цикл
повторюється знову, в іншому випадку виконується наступний оператор.
Повідомлення "Error! Repeat input" говорить про те, що послідовність
неправильна і необхідно повторити введення заново.
Розділ 6 утворений для введення та відкриття для читання вихідного файлу, відкриття і
запису вихідного файлу. Літера "r" означає, що файл відкривається для читання,
відповідно "w"-для запису. При відкритті відбувається автоматична перевірка
існування у вказаній директорії файлу. Якщо програма не в змозі знайти
або відкрити його виводитися повідомлення про помилку "Error! Can't open file "і
знову запитується ім'я, якщо ж помилок не знайдено виконується наступне
дію-запит імені файлу для результатів.
Розділ 7 призначений для шифрування даних. Його організація влаштована за принципом,
описаного в розділі 2.3. При цьому, якщо в останній послідовності не
вистачає n символів до к, програма автоматично приписує додаткові
пробіли. Конструкція if (feof (fp) & & i == 0) return 0 - утворена для виключення
додаткового циклу, що може виникнути, якщо кількість символів в
фото кратно к, в цьому випадку виконується зайвий цикл, що призводить до додавання
додаткових пропусків і, отже, збільшенню файлів. При досягненні
кінця файлу EOF шифрації припиняється.
Розділ 8 дешифрування і запис у файл-приймач-влаштований практично за тим же
принципом як і у роздiлi 7.Разлічія між операціями кодування та декодування
наводяться в підрозділі "Опис задачі". Дешифрування також припиняється при
досягненні кінця файлу.
Розділ 9 закриває раннє відкриті файли.
3.4. Використані технічні засоби
Для виконання програми досить комп'ютера типу IBM PC із процесором i386 і
вище і 8 Мбайт оперативної пам'яті, оснащеної будь-якій з наступних операційних
систем: MS DOS (починаючи з версії 5.0), Windows 95, Windows NT версій 4.0.
3.5. Виклик і завантаження
Запуск програми відбувається шляхом запуску файлу coDec. exe
3.6 Вхідні та вихідні дані
Файли-джерела при кодуванні по можливості повинні бути з розширенням txt, у той
час як файл-приймач може мати будь-яке. Це викликане причинами, описаними
раніше в пункті 3.2. При декодування обмежень немає.
4.Текст програми
//Шифратори-дешифратор
Розділ № 1
# Include
# Include
# Include
# Include
# Include
# Include
int main ()
(Розділ № 2
FILE * fp, * fp2;/* покажчики на потік */
int i, k, Sum, Sum_contr, pointer, select;
int W [] = (1,2,3,4,5,6,7,8,9,10);/* масив перевірки */
int Y [10];/* масив для кодової перестановки */
char B [11];/* масив для перестановленних символів */
char c;/* мінлива для зберігання символу */
char fname [20], fname2 [20];/* масиви для імен файлів */
/ * О с н о в н о е т е л о п р о г р а м м и */
Розділ № 3
/ * Вибір кодування-декодування */
while (1)
(
printf ( "nChoose coder (0) or decoder (1)");
scanf ( "% d", & select);
if ((select == 0) (select == 1)) break;
while (getchar ()!=' n ');
)
Розділ № 4
/ * Введення довжини кодової послідовності */
while (1)
(
printf ( "nInput length of code k (1 to 10)");
scanf ( "% d", & k);/* введення десяткового цілого */
if (k> = 1 & & k
while (getchar ()!=' n ');
printf ( "n Error! K must be integer from 1 to 10");
)
Розділ № 5
/ * Введення перестановки */
while (1)
(
printf ( "n Input% d elements n", k);
for (Sum = 0, Sum_contr = 0, i = 0; i
(
printf ( "Element [% d]:", i +1);
scanf ( "% d", & Y [i]);
Sum + = Y [i];
Sum_contr + = W [i];/* Обчислення контрольної суми */
)
if (Sum == Sum_contr) break;
while (getchar ()!=' n ');
printf ( "n Error! Repeat input");
)
/ * Очищення вхідного потоку */
while (getchar ()!=' n ');
Розділ № 6
/ * Введення імені файлу-джерела */
puts ( "nInput name of file-sourche :");< br />
gets (fname);
/ * Відкриття файлу-джерела */
while ((fp = fopen (fname, "r "))== NULL)/* відкриття файлу для читання */
(
puts ( "Error! Can't open file nInput name of file-sourcen");
gets (fname);
)
/ * Введення імені файлу-приймача */
puts ( "nInput name of file for results :");< br />
gets (fname2);
/ * Створення файлу-приймача */
if ((fp2 = fopen (fname2, "w "))== NULL)/* відкриття файлу для запису */
(
perror (fname2);
return 1;
)
Розділ № 7
/ * Шифрація і запис у файл-приймач */
if (select == 0)
(
while (1)
(
for (i = 0; i
(
c = fgetc (fp);
if (feof (fp) & & i == 0) return 0;
if (feof (fp) & & i> 0)
B [i +1] = '';
else
B [i +1] = c;
)
for (i = 0; i
(
pointer = Y [i];
putc (B [pointer], fp2);
)
if (feof (fp)) break;
)
)
Розділ № 8
/ * Дешифрування і запис у файл-приймач */
else
(
while (1)
(
for (i = 0; i
(
c = getc (fp);
pointer = Y [i];
B [pointer] = c;
)
if (feof (fp)) break;
for (i = 0; i
putc (B [i +1], fp2);
)
)
Розділ № 9
/ * Закриття файлу джерела і приймача */
fclose (fp);
fclose (fp2);
)