Заказать курсовые, контрольные, рефераты...
Образовательные работы на заказ. Недорого!

Выводы. 
Реализация двоичного поточного зашифрования/расшифрования файла с использованием схемы разворачивания ключа из PIN-кода (пароля) небольшой длины на основе генератора со сжатием

РефератПомощь в написанииУзнать стоимостьмоей работы

В курсовой работе было рассмотрено зашифрование/расшифрование данных, их особенности. Также было проанализировано схему работы линейно рекуррентного регистра, были изучены его свойства. Исследовали требования к паролям и на их основе осуществили проверку. На практике был реализован данный алгоритм. Результатом работы является программа, осуществляющая зашифрование/расшифрование любого документа… Читать ещё >

Выводы. Реализация двоичного поточного зашифрования/расшифрования файла с использованием схемы разворачивания ключа из PIN-кода (пароля) небольшой длины на основе генератора со сжатием (реферат, курсовая, диплом, контрольная)

В курсовой работе было рассмотрено зашифрование/расшифрование данных, их особенности. Также было проанализировано схему работы линейно рекуррентного регистра, были изучены его свойства. Исследовали требования к паролям и на их основе осуществили проверку. На практике был реализован данный алгоритм. Результатом работы является программа, осуществляющая зашифрование/расшифрование любого документа.

ПЕРЕЧЕНЬ ССЫЛОК.

  • 1. Шнайер Б. Прикладная криптография: Протоколы, алгоритмы, исходные тексты на языке Си. [Текст] / Б. Шнайер — М., 2006 р. — 613 с.
  • 2. Захист інформації в інформаційно-телекомунікаційних системах: Навч. посібник. Ч. 1. Криптографічний захист інформації. [Текст] / І.Д. Горбенко —Харків: ХНУРЕ, 2004 р. — 368 c.
  • 3. Электронный конспект лекций к лабораторной № 3. Упрощенные программные модели ЛРР и основанных на нем комбинированных генераторов. — 2009 г. — 14 с.
  • 4. Сложность пароля [Электронный ресурс]/Википедия — Режим доступа: http://uk.wikipedia.org/wiki/Сложность_пароля.

ПРИЛОЖЕНИЕ, А Код программы.

#include «stdafx.h» .

#include.

#include.

#include.

#include.

using namespace std;

unsigned __int8 OneTakt (unsigned __int32* State, int*K, int LenS) //генерирует один бит лрп.

{.

int a = State[0] & 0×1; //результирующий бит.

int Sj = a; //сумма битов.

Sj = Sj ^ (State[(K[0] - K[1]) / 32] >> ((K[0] - K[1]) % 32) & 1); //прибавляем.

if (K[2] && K[3]).

{.

Sj = Sj ^ (State[(K[0] - K[2]) / 32] >> ((K[0] - K[2]) % 32) & 1);

Sj = Sj ^ (State[(K[0] - K[3]) / 32] >> ((K[0] - K[3]) % 32) & 1);

}.

State[0] = State[0] >> 1; //сдвиг состояния.

for (int i = 1; i.

{.

unsigned char bit = State[i] & 1; //бит, который переносится из одного куска в другой.

State[i] = State[i] >> 1; //сдвиг.

State[i — 1] = State[i — 1] | (bit << 31); //записываем бит в следующий кусок.

}.

State[K[0] / 32] = State[K[0] / 32] | (Sj << (K[0] % 32 — 1)); //записываем сумму в самый левый бит.

return a;

}.

unsigned char genByte (unsigned __int32* State, int*K, int LenS) //генерирует один байт лрп.

{.

unsigned char res = 0;

for (int i = 0; i<8; i++) //цикл по битам.

res |= OneTakt (State, K, LenS) << i; //устанавливаем каждый бит по отдельности.

return res;

}.

int BitTestKey_G2(unsigned int*K, int LenK).

{.

int N1 = 0;

for (int i = 0; i.

{.

for (unsigned char mask = 1; mask ≠ 0; mask <<= 1).

if (K[i] & mask) N1++;

}.

return N1;

}.

void GenKey_G2(unsigned int*K, int LenK, int pin).

{.

double left = LenK*9725.0 / 20 000,.

right = LenK*10 275.0 / 20 000;

int n = 0;

srand (pin);

do {.

for (int i = 0; i < LenK; i++).

{.

K[i] = rand ();

}.

n = BitTestKey_G2(K, LenK);

} while (left >= n || n <= right);

}.

void genState (unsigned __int32 **state_ptr, int &len, int *coeffs, int pin) //генерирует состояние лрр

{.

len = coeffs[0] % 32 == 0? coeffs[0] / 32: coeffs[0] / 32 + 1; //длинна состояния.

unsigned __int32 *state = new unsigned __int32[len];

GenKey_G2(state, len, pin);//генерация ключа из PIN-кода.

*state_ptr = state;

}.

void gamm (unsigned char *data, int datalen, unsigned __int32 *state, int len, int *coeffs) //двоиное гаммрование.

{.

for (int i = 0; i.

{.

data[i] ^= genByte (state, coeffs, len); //двоичное гаммирование с байтом лрп.

}.

}.

int main ().

{.

srand (time (NULL));

setlocale (0, «»);

int coeffs[] = { 10, 7, 6, 2 }; //полином.

FILE *infile, *outfile;

int pin;

cout << «Введите пинкод: «;

cin >> pin;

char filename[20];

do.

{.

cout << «Введите имя файла, который нужно зашифровать: «;

cin >> filename;

if ((infile = fopen (filename, «rb»)) == NULL).

cout << «Не могу открыть файл. «;

else.

break;

} while (true);

do.

{.

cout << «Введите имя файла для записи результатa: «;

cin >> filename;

if ((outfile = fopen (filename, «wb»)) == NULL).

cout << «Не могу открыть файл. «;

else.

break;

} while (true);

unsigned char data[1024 * 8];

unsigned __int32 *state;

int len;

genState (&state, len, coeffs, pin); //генерирцуем состояние на основе пинкода.

while (!feof (infile)) //цикл чтения-шифрования-записи.

{.

int n = fread (data, 1, sizeof (data), infile); //чтение.

gamm (data, n, state, len, coeffs); //шифрование.

fwrite (data, 1, n, outfile); //запись.

}.

delete[] state;

fcloseall ();

system («pause»);

return 0;

}.

ПРИЛОЖЕНИЕ Б Скриншоты работы программы.

Выводы. Реализация двоичного поточного зашифрования/расшифрования файла с использованием схемы разворачивания ключа из PIN-кода (пароля) небольшой длины на основе генератора со сжатием.
Показать весь текст
Заполнить форму текущей работой