Зміст
Шифрування афінним шифром.
Завдання
Теоретичні відомості
Вибір ключів
Блок-схема алгоритму
Таблиця ідентифікаторів
Текст програми
Відкритий текст
Результат шифрування
Шифрування шифром RSA
Завдання
Теоретичні відомості
Вибір ключів
Зашифрування
Розшифрування
Висновки
Завдання
Вибрати ключі та розробити програму для за шифрування файлу даних заданим афінним шифром. Тип афінного шифру визначається останньою цифрою i НЗК. Об‘єм алфавіту визначається передостанньою цифрою j НЗК і дорівнює .
i
i mod 6
Тип афінного шифру
j
Розрядність алфавіту
Об‘єм алфавіту
3
3
Зсуву -го порядку
0
5
32
Теоретичні відомості
Вибір ключів
Ключ : {5, 7, 17, 23, 29}
Блок-схема алгоритму
Таблиця ідентифікаторів
Ідентифікатор
Тип ідентифікатора
Опис
n=32
int
Глибина алфавіту
key[5]={5,7,17,23,29}
int
Ключ зашифрування
*r_f
FILE
Вхідний файл
*w_f
FILE
Вихідний (зашифрований) файл
r_eof=0
int
Прапорець контролю кінця файлу
x_OK=1
int
Прапорець готовності символу
n_x=0
int
Лічильник символів (для блокового шифрування)
r_buf
unsigned long
Вхідний буфер даних (бітів)
w_buf = 0
unsigned long
Вихідний буфер даних (бітів)
x
unsigned long
Поточний символ
r_count=32
int
Лічильник бітів вхідного буфера
w_count=32
int
Лічильник бітів вихідного буфера
Текст програми
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
void main(void)
{
int n=32;
int key[5] = {5, 7, 17, 23, 29};
char *s;
FILE *r_f, *w_f;
int r_eof=0;
int x_OK=1;
int n_x=0;
unsigned long r_buf;
unsigned long w_buf = 0;
unsigned long x;
int r_count=32;
int w_count=32;
if ( (r_f=fopen("c:\\plain.f", "rb")) == NULL )
{
printf("cannot open the file data.fb");
getch();
exit(1);
}
else
if ( (w_f=fopen("c:\\encrypt.f", "wb")) == NULL )
{
printf("cannot open the file data.fbc");
getch();
exit(1);
}
else
{
if (fread(&r_buf, 1, 4, r_f) != 0)
while (!r_eof)
{
if (r_count<=0)
{
if (fread(&r_buf, 1, 4, r_f) != 0)
{
x |= (r_buf << (5+r_count)) & (n-1);
r_buf >>= (-r_count);
r_count += 32;
x_OK = 1 & !(r_count==32);
}
else
{
r_eof = 1;
x_OK = 1;
}
}
else
{
x = r_buf & (n-1);
r_buf >>= 5;
r_count -= 5;
x_OK = 1 & (r_count>=0);
}
if (x_OK)
{
x = (unsigned int)(fmod(x+key[n_x], n));
if (n_x==4)
n_x=0;
else
n_x++;
// printf("%4x", x);
itoa(x, s, 10);
fputs(strcat(s, " "), stdout);
w_buf |= x << (32-w_count);
w_count -= 5;
if (w_count<=0)
{
fwrite(&w_buf, 4, 1, w_f);
w_buf &= 0;
if (w_count==0)
w_count = 32;
else
{
w_buf |= x >> (5+w_count);
w_count += 32;
}
}
}
}
fclose(r_f);
fclose(w_f);
}
}
Відкритий текст
Виписати можливі біт, що використовуються для формування маски підмережі.
Викреслити комбінації, де значення усіх одночасно чи Це необхідно зробити тому, що вони представляють недопустимі (службові) IP-адреси: комбінація означає всю локальну мережу, а співпадає з маскою підмережі.
Перевести в десятковий формат значення для кожної підмережі. Кожне таке значення представляє одну мережу використовується для визначення діапазону хостів в ній.
Ця процедура проілюстрована на рисунку 3.
255 255 224
Рисунок 3. Перший спосіб визначення діапазонів ідентифікаторів підмереж, що входять в об’єднану мережу
Зазначимо, що ідентифікатори підмереж, складаються з одних нулів та одних одиниць, називаються адресами підмереж спеціального призначення (special case subnet addresses). Ідентифікатор з одних одиниць застосовується для широкомовлення в мережі. Ідентифікатор з одних нулів означає локальну мережу. При на підмережі такі ідентифікатори використовувати не рекомендується. Але використання можливим, якщо маршрутизатори та все інше мережеве обладнання Вашої мережі буде підтримувати. Обмеження пов’язані з використанням, описуються в RFC 950.
Другий спосіб визначення ідентифікаторів підмереж швидший тому ефективніший, попередній, коли необхідно відвести маску підмережі більше чотирьох біт.
Записати одиницями кількість біт, необхідних для ідентифікаторів підмереж доповнити справа нулями до одного октету. Наприклад, якщо використовується два біти для ідентифікаторів підмереж, то необхідно записати це значення як 11000000.
Перетворити найменший значимий в десяткове число – Ви отримаєте приріст для кожної наступної підмережі. Для нашого прикладу це число рівне 64.
Починаючи з нуля, виписати послідовно отримувані з допомогою приросту значення аж до значення 256.
Ця процедура проілюстрована на рисунку 4.
Результат шифрування
7 13 11 22 11 25 14 15 23 20 1 24 31 7 13 2 21 8 16 20 19 27 28 19 16 10 15 19 21 22 15 5 29 24 5 23 22 8 26 1 7 14 11 12 11 28 10 15 31 12 1 12 0 14 8 1 26 8 22 2 20 5 24 21 28 12 15 25 21 18 4 6 17 24 26 2 21 9 10 26 24 30 9 24 27 27 30 14 22 4 13 31 31 7 4 3 17 24 17 30 23 30 0 13 1 12 2 28 5 21 28 3 23 22 9 2 25 23 31 30 7 13 11 12 11 29 30 13 8 28 31 24 31 16 0 2 7 2 17 26 19 29 24 19 16 18 2 18 5 24 20 29 16 28 8 5 9 3 14 25 5 0 10 18 11 21 6 15 28 12 0 2 15 22 0 9 26 0 19 4 0 1 20 27 11 12 0 12 5 20 4 5 17 6 25 0 21 8 26 1 28 14 11 24 31 16 30 13 23 6 0 18 31 14 4 1 28 16 3 6 3 29 12 20 29 30 0 18 6 20 12 3 25 14 25 22 21 1 31 27 19 14 12 30 12 27 7 21 16 20 0 8 19 8 24 2 20 24 17 30 23 30 20 21 2 12 0 20 6 22 8 3 19 22 23 4 22 16 2 27 1 14 25 17 27 23 26 13 5 28 0 14 16 15 8 3 15 24 18 4 16 23 17 28 14 4 1 24 6 16 12 3 31 14 21 12 2 5 23 1 14 9 5 17 31 21 26 13 7 12 30 10 0 11 8 12 7 2 17 26 19 29 24 19 16 18 2 18 5 24 20 29 16 30 5 1 5 4 14 26 5 6 14 24 11 2 9 21 25 12 1 4 0 7 9 2 21 8 17 30 3 28 4 22 10 4 3 18 25 19 28 3 1 6 22 18 5 10 10 2 5 8 9 24 15 29 6 14 10 18 29 6 31 7 16 1 7 8 5 30 23 26 20 27 9 12 31 20 6 18 0 4 15 30 5 3 5 10 9 25 17 22 10 24 28 23 2 13 10 18 16 1 17 28 25 30 12 24 19 8 19 24 8 19 14 28 3 2 5 13 13 3 17 24 22 16 5 9 22 28 23 30 11 20 11 22 10 14 0 4 13 15 0 14 0 3 19 24 15 2 20 23 13 19 10 12 31 0 22 15 28 4 30 22 28 6 9 3 6 26 4 14 25 11 11 28 2 13 4 20 0 6 28 7 25 2 26 22 16 22 3 25 20 21 2 28 0 24 2 20 5 11 27 13 24 18 5 7 14 25 5 24 13 24 11 26 30 13 23 22 30 2 31 7 28 3 12 0 18 24 3 6 20 27 12 12 3 28 5 15 12 5 3 30 21 10 5 6 22 28 31 12 25 19 11 23 30 14 10 4 13 31 15 9 0 3 12 8 16 4 20 23 25 19 5 28 1 14 5 21 8 4 2 14 25 2 21 2 6 27 31 28 13 16 28 29 6 16 23 30 30 30 15 22 0 9 9 24 17 12 3 29 20 19 20 20 0 12 21 19 4 6 17 24 22 12 18 1 22 26 5 6 10 20 27 27 22 15 23 6 2 4 15 15 8 3 26 6 15 30 7 24 20 27 10 4 19 4 5 20 25 8 27 7 18 4 22 1 19 26 21 30 12 4 28 23 26 13 10 4 1 8 31 7 25 2 23 8 18 4 0 28 12 22 14 28 3 18 6 20 16 3 17 6 24 6 21 1 11 26 5 14 25 23 12 25 14 15 10 12 0 28 15 16 0 9 26 2 2 23 5 12 17 27 29 6 15 17 25 13 13 13 6 0 10 5 9 1 23 1 5 8 25 23 31 21 7 21 23 30 13 7 19 16 17 11 28 18 31 29 7 23 17 27 29 6 15 17 25 13 5 11 17 24 5 9 10 10 7 3 5 8 25 23 31 21 7 21 23 6 8 27 17 31 0 2 24 16 19 24 19 30 28 20 29 30 19 13 25 13 1 0 22 30 25 22 22 5 30 26 5 16 13 22 11 28 14 15 10 10 29 8 19 8 0 2 14 0 18 30 3 2 8 19 10 20 2 16 6 13 21 3 4 28 21 4 21 1 22 25 19 22 12 30 8 22 10 21 10 2 30 18 15 13 8 3 15 24 20 4 16 28 20 19 15 28 2 18 22 22 15 3 17 16 24 12 18 3 10 26 10 14 13 2 11 24 26 22 23 6 3 4 31 7 5 1 28 8 18 6 3 6 28 21 25 12 15 21 5 13 29 4 18 14 1 26 18 3 14 26 5 22 12 30 12 21 23 14 28 4 1 18 31 10 12 3 20 1 25 23 5 12 13 15 29 4 0 12 5 13 4 5 25 30 24 2 21 7 23 1 30 30 12 24 15 30 25 13 28 12 0 12 0 11 16 3 26 6 17 30 19 0 12 20 13 12 1 18 9 20 20 29 21 30 24 16 21 9 14 25 11 14 28 23 15 29 18 14 2 4 29 16 31 7 24 4 25 24 22 0 4 6 20 27 4 12 15 13 5 15 28 4 25 6 26 6 25 7 6 27 16 6 29 28 11 21 15 15 23 4 13 3 31 9 20 2 15 0 20 30 7 30 4 19 5 20 2 2 5 24 24 6 29 24 5 31 21 1 22 25 13 30 9 24 11 4 18 15 19 12 1 6 0 7 29 1 11 24 19 8 3 31 20 19 9 12 1 18 9 20 20 29 21 30 24 16 21 9 14 25 11 14 25 25 28 28 30 13 13 28 17 8 15 12 16 4 20 8 18 4 19 30 20 27 12 12 3 2 21 16 28 4 17 22 26 16 5 7 14 26 4 14 25 7 15 30 8 31 28 24 29 25 7 7 14 18 7 10 15 31 27 0 6 3 29 30 3 27 30 14 30 20 22 26 26 5 25 1 8 9 9 26 13 1 19 30 20 31 28 24 1 25 19 14 29 9 25 22 16 8 3 29 28 21 5 12 4 24 2 18 8 3 3 14 24 6 22 1 19 25 5 24 12 0 27 27 10 14 12 4 13 3 31 9 0 2 20 24 17 10 20 5 20 27 4 12 31 20 6 22 0 4 2 14 24 10 5 10 2 20 23 14 16 26 28 4 10 21 27 28 31 6 0 7 29 4 15 24 19 26 19 28 12 20 9 28 2 22 21 18 28 3 30 6 24 4 22 1 31 25 5 8 12 2 11 29 30 13 29 28 17 4 19 7 5 27 11 0 16 24 19 0 20 20 17 4 19 6 5 13 16 5 31 30 25 6 25 4 26 1 19 14 10 18 11 25 30 15 23 6 0 14 16 12 12 27 9 24 31 25 3 26 8 20 29 4 4 18 5 26 7 11 28 14 24 26 21 1 6 26 1 22 12 30 12 21 23 14 28 4 1 18 31 10 12 3 21 18 31 27 17 31 20 20 29 14 2 18 5 13 1 4 4 28 22 30 5 3 26 27 10 30 10 30 8 21 15 15 23 20 31 14 28 7 9 27 11 0 16 24 19 0 20 20 17 4 19 6 5 13 16 5 31 30 25 22 21 1 31 25 13 30 11 20 11 29 10 14 8 20 1 4 31 8 12 3 9 24 15 2 20 27 20 27 10 20 0 18 25 21 28 3 27 14 24 30 5 3 14 26 9 6 13 12 8 30 26 16 8 28 4 4 19 7 29 29 18 0 16 30 7 24 20 20 7 28 2 18 6 17 12 5 3 30 21 0 5 7 22 28 5 8 12 20 11 24 22 14 31 20 29 24 31 13 16 10 7 10 22 18 3 3 12 20 29 6 2 18 5 21 8 6 1 22 25 10 22 5 22 25 5 30 13 20 11 29 10 14 23 14 1 8 31 7 5 1 24 0 16 30 23 0 7 20 21 20 0 18 25 19 28 3 1 6 22 18 5 3 2 25 10 14 25 19 27 21 22 14 23 4 30 2 31 7 20 2 20 16 22 30 7 8 20 19 21 28 2 16 2 13 21 4 22 30 25 16 21 4 6 19 5 16 9 30 12 23 30 13 23 22 0 14 28 9 8 3 23 24 17 22 3 0 28 19 29 28 3 2 5 20 5 11 31 5 21 30 5 3 18 25 10 22 12 18 27 4 10 21 6 20 0 12 31 0 27 4 14 24 15 24 3 0 19 27 4 12 15 21 5 17 16 4 31 30 25 22 5 9 2 27 5 22 12 18 27 4 26 14 3 30 13 3 15 14 0 2 24 16 19 26 20 0 4 22 14 4 6 18 25 14 8 11 3 9 14 11 11 1 27 4 26 8 29 19 15 11 15 18 27 3 1 14 16 8 0 2 16 24 31 31 4 30 12 20 14 4 19 20 5 13 13 3 25 22 22 0 21 1 22 27 10 22 12 18 27 4 10 21 10 2 30 18 15 13 8 3 15 24 20 4 16 28 20 19 15 28 2 18 22 22 15 3 17 16 24 12 18 3 10 26 10 14 13 2 11 24 10 21 15 20 29 24 31 9 0 4 15 0 17 30 7 0 12 20 9 4 3 18 9 15 24 5 22 14 23 10 22 5 2 25 18 6 29 8 12 25 14 14 3 30 13 5 31 14 28 2 12 24 19 8 19 25 8 20 16 18 1 10 25 13 13 4 31 22 23 22 21 1 11 26 10 30 12 26 27 31 22 7 27 12 0 4 31 7 5 1 26 22 16 2 3 25 24 21 15 12 1 18 25 19 8 3 2 14 23 12 22 1 19 26 24 12 10 16 27 23 10 15 28 20 30 14 28 7 1 1 26 14 17 22 20 3 8 19 29 30 4 14 5 22 8 4 1 30 28 2 5 11 26 1 6 6 29 28 12 28 27 18 1 21 22 8 15 14 0 2 24 24 15 2 20 27 20 27 11 12 0 2 21 19 8 4 7 22 28 30 21 5 26 1 15 6 29 14 11 3 18 14 10 10 1 12 0 21 0 9 8 16 3 2 20 29 17 27 10 20 0 14 21 13 28 5 4 28 22 0 21 5 14 27 5 8 10 14 27 4 10 21 10 2 30 18 15 13 8 3 15 24 20 4 16 28 20 19 15 28 2 18 22 22 15 3 17 16 24 12 18 3 10 26 10 14 13 2 11 24 10 21 27 20 0 6 31 14 8 1 20 24 17 2 20 27 20 27 14 4 2 18 6 13 16 3 17 30 5 31 5 10 6 26 4 14 12 8 11 21 23 13 5 4 13 3 31 9 20 2 21 16 15 26 19 23 9 20 7 28 3 28 5 22 20 5 31 24 5 31 19 1 22 26 21 14 11 12 27 26 10 13 27 4 16 7 3 22 8 2 0 8 18 30 7 24 20 20 7 28 2 18 6 17 12 5 3 14 24 10 5 10 2 20 23 14 16 26 28 4 10 21 27 20 29 8 31 7 1 1 26 6 19 14 19 23 1 19 8 4 6 18 9 22 23 3 22 6 24 10 22 5 10 27 24 28 11 24 11 30 2 14 7 28 17 12 31 7 25 2 26 22 16 22 3 25 20 21 2 28 0 10 25 13 13 5 31 30 5 31 5 3 18 26 6 22 14 30 8 23 30 14 5 4 13 21 31 7 28 2 15 0 19 30 19 0 20 20 29 22 4 28 5 13 1 3 30 30 21 20 6 3 14 26 18 6 16 24 15 4 18 14 23 6 17 9 20 15 29 11 23 18 3 29 8 31 9 28 10 21 9 15 19 15 8 5 22 14 25 10 21 8 26 27 13 30 13 8 11 21 27 14 23 12 31 0 15 9 20 2 31 24 17 16 19 23 13 19 10 12 31 0 6 17 24 4 25 6 23 6 9 2 26 1 9 22 10 26 28 4 18 15 1 20 0 12 15 9 0 9 30 24 17 0 4 28 12 20 29 22 12 18 25 30 8 4 17 8 24 10 22 9 26 26 17 14 9 12 8 30 30 13 23 22 0 8 0 11 0 3 26 30 19 2 20 23 1 19 8 4 6 18 25 18 0 4 23 6 24 2 5 16 25 1 18 14 9 26 12 30 22 15 6 12 0 4 15 22 31 9 22 16 3 6 19 29 8 19 13 20 0 30 21 22 31 12 17 24 14 28 5 16 26 1 18 14 9 8 12 28 22 13 5 4 13 5 31 15 0 2 17 16 17 30 19 25 0 21 29 22 4 28 5 13 1 5 25 6 25 28 21 8 26 1 21 6 29 28 27 27 30 13 23 14 18 15 20 14 17 6 17 9 10 26 3 2 20 20 10 12 31 14 22 24 8 4 17 16 22 6 25 7 6 27 16 6 16 16 31 21 15 13 31 28 0 24 15 15 0 1 25 24 17 30 23 30 12 20 14 4 1 24 2 15 0 4 19 6 24 2 21 1 15 26 23 14 13 8 11 27 22 15 25 4 29 2 15 16 31 9 14 24 31 5 19 30 16 20 11 12 2 14 21 14 0 4 15 30 5 3 21 9 26 26 21 30 12 26 12 30 22 15 23 22 30 2 31 7 28 3 12 0 18 24 3 6 20 27 29 28 0 18 25 15 0 4 17 16 22 0 21 1 22 27 10 22 12 18 27 4 10 21 9 6 18 19 20 14 17 6 17 1 12 28 20 23 13 20 13 28 2 30 22 15 24 3 4 30 25 6 21 1 19 26 21 30 12 30 24 26 2 16 8 20 1 8 0 14 8 1 7 0 18 30 19 23 5 20 29 12 15 17 6 17 12 5 4 6 24 26 5 10 26 1 25 24 28 17 29 10 7 17 23 29
Завдання
Зашифрувати Слово відкритого тексту за алгоритмом RSA. Слово визначається останньою буквою і НЗК. Для генерування ключів використати числа p та q, які визначаються передостанньою цифрою j НЗК.
i
Слово
j
p
q
3
ТРИ
0
3
17
Теоретичні відомості
Вибір ключів
Зашифрування
Т
Р
И
23
21
7
23
21
7
44
21
40
Розшифрування
Висновки
Під час виконання даної курсової роботи я вдосконалив свої знання про симетричне і асиметричне шифрування, а також блокове шифрування.
Проблема 1: В мові програмування С з файлу можна зчитувати інформацію побайтно (8, 16, 32, ..., n*8 біт), а в завданні поставлена задача шифрування 5-ти бітних символів.
Вирішення 1: Читати в кілька байт з файлу в буфер, а потім вже операціями зсуву та побітового множення і додавання вибирати по 5 біт.
Проблема 2: Співпадання деяких зашифрованих символів (шифрування RSA) з символами відкритого тексту.
Вирішення 2: Не вирішена. Можливо, через те, що малі ключ і модуль.
МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра автоматики та телемеханіки
Курсова робота
з курсу: „Методи та засоби криптографічних перетворень”
на тему: “Симетричні та асиметричні методи зашифрування інформації”
Виконав:
ст. гр. ІБ-42
Міколяш А. Ф.
Перевірив:
Горпенюк А. Я.
Львів – 2005