Банк рефератов содержит более 364 тысяч рефератов, курсовых и дипломных работ, шпаргалок и докладов по различным дисциплинам: истории, психологии, экономике, менеджменту, философии, праву, экологии. А также изложения, сочинения по литературе, отчеты по практике, топики по английскому.
Полнотекстовый поиск
Всего работ:
364139
Теги названий
Разделы
Авиация и космонавтика (304)
Административное право (123)
Арбитражный процесс (23)
Архитектура (113)
Астрология (4)
Астрономия (4814)
Банковское дело (5227)
Безопасность жизнедеятельности (2616)
Биографии (3423)
Биология (4214)
Биология и химия (1518)
Биржевое дело (68)
Ботаника и сельское хоз-во (2836)
Бухгалтерский учет и аудит (8269)
Валютные отношения (50)
Ветеринария (50)
Военная кафедра (762)
ГДЗ (2)
География (5275)
Геодезия (30)
Геология (1222)
Геополитика (43)
Государство и право (20403)
Гражданское право и процесс (465)
Делопроизводство (19)
Деньги и кредит (108)
ЕГЭ (173)
Естествознание (96)
Журналистика (899)
ЗНО (54)
Зоология (34)
Издательское дело и полиграфия (476)
Инвестиции (106)
Иностранный язык (62791)
Информатика (3562)
Информатика, программирование (6444)
Исторические личности (2165)
История (21319)
История техники (766)
Кибернетика (64)
Коммуникации и связь (3145)
Компьютерные науки (60)
Косметология (17)
Краеведение и этнография (588)
Краткое содержание произведений (1000)
Криминалистика (106)
Криминология (48)
Криптология (3)
Кулинария (1167)
Культура и искусство (8485)
Культурология (537)
Литература : зарубежная (2044)
Литература и русский язык (11657)
Логика (532)
Логистика (21)
Маркетинг (7985)
Математика (3721)
Медицина, здоровье (10549)
Медицинские науки (88)
Международное публичное право (58)
Международное частное право (36)
Международные отношения (2257)
Менеджмент (12491)
Металлургия (91)
Москвоведение (797)
Музыка (1338)
Муниципальное право (24)
Налоги, налогообложение (214)
Наука и техника (1141)
Начертательная геометрия (3)
Оккультизм и уфология (8)
Остальные рефераты (21692)
Педагогика (7850)
Политология (3801)
Право (682)
Право, юриспруденция (2881)
Предпринимательство (475)
Прикладные науки (1)
Промышленность, производство (7100)
Психология (8692)
психология, педагогика (4121)
Радиоэлектроника (443)
Реклама (952)
Религия и мифология (2967)
Риторика (23)
Сексология (748)
Социология (4876)
Статистика (95)
Страхование (107)
Строительные науки (7)
Строительство (2004)
Схемотехника (15)
Таможенная система (663)
Теория государства и права (240)
Теория организации (39)
Теплотехника (25)
Технология (624)
Товароведение (16)
Транспорт (2652)
Трудовое право (136)
Туризм (90)
Уголовное право и процесс (406)
Управление (95)
Управленческие науки (24)
Физика (3462)
Физкультура и спорт (4482)
Философия (7216)
Финансовые науки (4592)
Финансы (5386)
Фотография (3)
Химия (2244)
Хозяйственное право (23)
Цифровые устройства (29)
Экологическое право (35)
Экология (4517)
Экономика (20644)
Экономико-математическое моделирование (666)
Экономическая география (119)
Экономическая теория (2573)
Этика (889)
Юриспруденция (288)
Языковедение (148)
Языкознание, филология (1140)

Лабораторная работа: Алгоритм формирования ключей в процессе функционирования DES

Название: Алгоритм формирования ключей в процессе функционирования DES
Раздел: Рефераты по информатике, программированию
Тип: лабораторная работа Добавлен 12:17:56 01 сентября 2009 Похожие работы
Просмотров: 46 Комментариев: 19 Оценило: 3 человек Средний балл: 5 Оценка: неизвестно     Скачать

Кафедра: АСОИиУ

Лабораторная работа

«Алгоритм формирования ключей в процессе функционирования DES »

по дисциплине

«Методы и средства защиты информации»

Москва 2009 г.

Оглавление

Техническое задание. 3

Алгоритм формирования ключей в процессе функционирования DES. 3

Работа алгоритма. 4

1 шаг. Перестановки битов ключа с использованием таблицы перестановок. 5

2 шаг. Разбиение ключа. 6

3 шаг. Создание 16-ти подключей путем сдвига. 7

4 шаг. Перестановка битов ключа с использованием таблицы PC1. 8

Исходный код. 9

Пример работы программы.. 15


Техническое задание

1. Реализовать алгоритм формирования ключей в процессе функционирования DES на языке программирования C++.

2. Провести тест программы.

Алгоритм формирования ключей в процессе функционирования DES

Формирование ключей – алгоритм, позволяющий получить по относительно короткому ключу шифрования последовательность раундовых ключей.

Входные данные: Ключ состоит из 8 символов или 8 байт. Соответственно ключ имеет размер 64 байта. Но размер ключа используется только для записи (для организации данных). Фактически, каждый 8 бит отбрасывается и эффективный размер ключа – 56 бит.

Работа алгоритма

1 шаг. Перестановки битов ключа с использованием таблицы перестановок.

Для примера введем:

olga1234

Заданный ключ в двоичном представлении:

0110111101101100011001110110000100110001001100100011001100110100

В начале над ключом шифра выполняется операция B, которая сводится к выбору определенных бит и их перестановке, как это показано в таблицей. Причем, первые четыре строки определяют, как выбираются биты последовательности C(0) (первым битом C(0) будет бит 57 бит ключа шифра, затем бит 49 и т.д., а последними битами биты 44 и 36 ключа шифра), а следующие четыре строки – как выбираются биты последовательности D(0) (т.е. последовательность D(0) будем состоять из битов 63,55,…, 12, 4 ключа шифра).

57 49 41 33 25 17 9
1 58 50 42 34 26 18
10 2 59 51 43 35 27
19 11 3 60 52 44 36
63 55 47 39 31 23 15
7 62 54 46 38 30 22
14 6 61 53 45 37 29
21 13 5 28 20 12 4

В результате перестановки ключ будет выглядеть так:

00001111111111111111000000000101110101100101100001110011

2 шаг. Разбиение ключа

На этом шаге осуществляется разбиение ключа на 2 половины C0 и D0 . Каждая половина содержит 28 бит.

C0 :

0000111111111111111100000000

D0 :

0101110101100101100001110011

3 шаг. Создание 16-ти подключей путем сдвига

После определения C(0) и D(0) рекурсивно определяются C(i) и D(i), i=1,2,…, 16. Для этого применяются операции сдвига влево на один или два бита в зависимости от номера шага итерации, как это показано в таблице «Функция сдвига Si». Операции сдвига выполняются для последовательностей C(i) и D(i) независимо. Например, последовательность C(3) получается, посредством сдвига влево на две позиции последовательности C(2), а последовательность D(3) – посредством сдвига влево на две позиции последовательности D(2). Следует иметь в виду, что выполняется циклический сдвиг влево. Например, единичный сдвиг влево последовательности C(i) приведет к тому, что первый бит C(i) станет последним и последовательность бит будет следующая: 2,3,…, 28,1.

Таблица «Функция сдвига Si»

1 1
2 1
3 2
4 2
5 2
6 2
7 2
8 2
9 1
10 2
11 2
12 2
13 2
14 2
15 2
16 1

В результате сдвига получаем следующие пары


Количество сдвигов Созданные пары
1

C1 : 0001111111111111111000000000

D1 : 1011101011001011000011100110

1

C2 : 0011111111111111110000000000

D2 : 0111010110010110000111001101

2

C3 : 1111111111111111000000000011

D3 : 1101011001011000011100110111

2

C4 : 1111111111111100000000001111

D4 : 0101100101100001110011011101

2

C5 : 1111111111110000000000111111

D5 : 0110010110000111001101110101

2

C6 : 1111111111000000000011111111

D6 : 1001011000011100110111010110

2

C7 : 1111111100000000001111111111

D7 : 0101100001110011011101011001

2

C8 : 1111110000000000111111111111

D8 : 0110000111001101110101100101

1

C9 : 1111100000000001111111111111

D9 : 1100001110011011101011001011

2

C10 : 1110000000000111111111111111

D10 : 0000111001101110101100101100

2

C11 : 1000000000011111111111111110

D11 : 0011100110111010110010110000

2

C12 : 0000000001111111111111111000

D12 : 1110011011101011001011000011

2

C13 : 0000000111111111111111100000

D13 : 1001101110101100101100001110

2

C14 : 0000011111111111111110000000

D14 : 0110111010110010110000111001

2

C15 : 0001111111111111111000000000

D15 : 1011101011001011000011100110

1

C16 : 0011111111111111110000000000

D16 : 0111010110010110000111001101

4 шаг. Перестановка битов ключа с использованием таблицы PC1

До финальной перестановки битов ключей, необходимо слияние каждой пары данных. После того, как для каждого битового блока Cn Dn , где 1<=n <=16 осуществиться соответствующая перестановка по таблице (см ниже), формируя ключи. Только 48 бит каждой объединенной пары сохраняется в перестановленном ключе.

14 17 11 24 1 5
3 28 15 6 21 10
23 19 12 4 26 8
16 7 27 20 13 2
41 52 31 37 47 55
30 40 51 45 33 48
44 49 39 56 34 53
46 42 50 36 29 32

Все подключи:

K 1 : 111001111101001101110010001100110001010011011101

K 2 : 111001101101001101110011111011100011011001010110

K 3 : 101011111101001111011011001111011110001011101010

K 4 : 001111100101001111011011011101001101110001000011

K 5 : 001111100101100111011001100011101010010001111110

K 6 : 000111110110100111011101101010011111111011000000

K 7 : 000111100110110110011101011111001100011000110011

K 8 : 010111100010110110101101100111110100110001001110

K 9 : 010110111010110110101101010001010001111010110110

K 10 : 110110001010110010101111110110010010100011111001

K 11 : 111100001010111010100110001000111101101000011101

K 12 : 111100011011111000100110000101110011010010110110

K 13 : 111000011011011001110110111010010000100011100101

K 14 : 111001001101011001110110010001101110101010011111

K 15 : 111001111101001101110010001100110001010011011101

K 16 : 111001101101001101110011111011100011011001010110

Исходный код

#include <stdio.h>

#include<math.h>

#include<string.h>

#include<stdlib.h>

int main (int argc, char *argv[]) {

int

i, b, y, r, j, v, p, m, l, f, u, k, a, s, q, D[100] [100], Y[100] [100], U[100] [100], X[1000] [1000], E[100] [100], G[100] [100], W[100] [100], P[100] [1 $

double z;

int key[16]={1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1};

char A[1000];

char B[200];

char N[200];

char T[200];

char C[1000];

char Z[43];

char R[43];

char L[43];

char *str2;

char *str;

char *str1;

char *str3;

char *str4;

char *str5;

char d[100];

printf («\nVvedite key\n»);

str=(char *) (malloc(1000));

for (i=0; i<1000; i++) {

scanf («%c»,&str[i]);

if (str[i]==(char) 10) {

m=i;

break;

}

if (str[i]==(char) 32) {

str[i]=157;}

}

if (m!=8) {

printf («\nKey neveren\n»);

}

for (i=0; i<m; i++) {

A[i]=str[i];}

for (i=0; i<m; i++) {

B[i]=(int) A[i];

printf («%d\n», B[i]);

}

for (i=0; i<m; i++) {

f=B[i];

for (j=0; j<8; j++) {

if (f<1) {

X[j] [i]=0;

goto Metka;}

s=f/2;

/*printf («%d», s);*/

z=fmod (f, 2);

if (z!=0)

X[j] [i]=1;

else

X[j] [i]=0;

f=s;

Metka:printf («%d», X[j] [i]);}

printf («\n»);

}

printf («\n»);

k=0;

for (i=0; i<m; i++) {

k=i*8;

for (j=0; j<8; j++) {

N [j+k]=X [8-j-1] [i];

}

}

for (i=0; i<64; i++) {

printf («%d», N[i]);}

printf («\n»);

C[0]=N[57]; C[1]=N[49]; C[2]=N[41]; C[3]=N[33]; C[4]=N[25]; C[5]=N[17]; C[6]=N[9]; C[7]=N[1];

C[8]=N[58]; C[9]=N[50]; C[10]=N[42]; C[11]=N[34]; C[12]=N[26]; C[13]=N[18]; C[14]=N[10];

C[15]=N[2]; C[16]=N[59]; C[17]=N[51]; C[18]=N[43]; C[19]=N[35]; C[20]=N[27]; C[21]=N[19];

C[22]=N[11]; C[23]=N[3]; C[24]=N[60]; C[25]=N[52]; C[26]=N[44]; C[27]=N[36]; C[28]=N[63];

C[29]=N[55]; C[30]=N[47]; C[31]=N[39]; C[32]=N[31]; C[33]=N[23]; C[34]=N[15]; C[35]=N[7];

C[36]=N[62]; C[37]=N[54]; C[38]=N[46]; C[39]=N[38]; C[40]=N[30]; C[41]=N[22]; C[42]=N[14];

C[43]=N[6]; C[44]=N[61]; C[45]=N[53]; C[46]=N[45]; C[47]=N[37]; C[48]=N[29]; C[49]=N[21];

C[50]=N[13]; C[51]=N[5]; C[52]=N[28]; C[53]=N[20]; C[54]=N[12]; C[55]=N[4];

for (i=0; i<56; i++) {

printf («%d», C[i]);

}

for (i=0; i<56; i++) {

if (i<28) {

Z[i]=C[i];}

if (i>27) {

R [i-28]=C[i];}

}

printf («\n»);

for (i=0; i<28; i++) {

printf («%d», Z[i]);}

printf («\n»);

for (i=0; i<28; i++) {

printf («%d», R[i]);}

printf («\n»);

printf («\n»);

for (j=0; j<16; j++) {

v=key[j];

for (i=0; i<28; i++) {

if (v==2) {

Y[26] [j]=Z[0];

Y[27] [j]=Z[1];

U[26] [j]=R[0];

U[27] [j]=R[1];

}

if (v==1) {

Y[27] [j]=Z[1];

U[27] [j]=R[1];

}

if (i<(28-v)) {

Y[i] [j]=Z [i+v];

U[i] [j]=R [i+v];}

Z[i]=Y[i] [j];

R[i]=U[i] [j];

/*printf («%d», U[i] [j]);*/

}

/*printf («\n»);*/

}

for (j=0; j<16; j++) {

for (i=0; i<56; i++) {

if (i<28) {

W[i] [j]=Y[i] [j];}

if (i>27) {

W[i] [j]=U [i-28] [j];}

printf («%d», W[i] [j]);

}

printf («\n»);

}

for (j=0; j<16; j++) {

P[0] [j]=W[14] [j]; P[1] [j]=W[17] [j]; P[2] [j]=W[11] [j]; P[3] [j]=W[24] [j]; P[4] [j]=W[1] [j]; P[5] [j]=W[5] [j];

P[6] [j]=W[3] [j]; P[7] [j]=W[28] [j]; P[8] [j]=W[15] [j]; P[9] [j]=W[6] [j]; P[10] [j]=W[21] [j]; P[11] [j]=W[10] [j];

P[12] [j]=W[23] [j]; P[13] [j]=W[19] [j]; P[14] [j]=W[12] [j]; P[15] [j]=W[4] [j]; P[16] [j]=W[26] [j]; P[17] [j]=W[8] [j];

P[18] [j]=W[16] [j]; P[19] [j]=W[7] [j]; P[20] [j]=W[27] [j]; P[21] [j]=W[20] [j]; P[22] [j]=W[13] [j]; P[23] [j]=W[2] [j];

P[24] [j]=W[41] [j]; P[25] [j]=W[52] [j]; P[26] [j]=W[31] [j]; P[27] [j]=W[37] [j]; P[28] [j]=W[47] [j]; P[29] [j]=W[55] [j];

P[30] [j]=W[30] [j]; P[31] [j]=W[40] [j]; P[32] [j]=W[51] [j]; P[33] [j]=W[45] [j]; P[34] [j]=W[33] [j]; P[35] [j]=W[48] [j];

P[36] [j]=W[44] [j]; P[37] [j]=W[49] [j]; P[38] [j]=W[39] [j]; P[39] [j]=W[56] [j]; P[40] [j]=W[34] [j]; P[41] [j]=W[53] [j];

P[42] [j]=W[46] [j]; P[43] [j]=W[42] [j]; P[44] [j]=W[50] [j]; P[45] [j]=W[36] [j]; P[46] [j]=W[29] [j]; P[47] [j]=W[32] [j];

}

for (j=0; j<16; j++) {

for (i=0; i<48; i++) {

printf («%d», P[i] [j]);

}

printf («\n»);

}

}

Пример работы программы

Оценить/Добавить комментарий
Имя
Оценка
Комментарии:
Хватит париться. На сайте FAST-REFERAT.RU вам сделают любой реферат, курсовую или дипломную. Сам пользуюсь, и вам советую!
Никита08:30:31 02 ноября 2021
.
.08:30:30 02 ноября 2021
.
.08:30:30 02 ноября 2021
.
.08:30:29 02 ноября 2021
.
.08:30:28 02 ноября 2021

Смотреть все комментарии (19)
Работы, похожие на Лабораторная работа: Алгоритм формирования ключей в процессе функционирования DES

Назад
Меню
Главная
Рефераты
Благодарности
Опрос
Станете ли вы заказывать работу за деньги, если не найдете ее в Интернете?

Да, в любом случае.
Да, но только в случае крайней необходимости.
Возможно, в зависимости от цены.
Нет, напишу его сам.
Нет, забью.



Результаты(288303)
Комментарии (4159)
Copyright © 2005-2021 HEKIMA.RU [email protected] реклама на сайте