Меню
  Список тем
  Поиск
Полезная информация
  Краткие содержания
  Словари и энциклопедии
  Классическая литература
Заказ книг и дисков по обучению
  Учебники, словари (labirint.ru)
  Учебная литература (Читай-город.ru)
  Учебная литература (book24.ru)
  Учебная литература (Буквоед.ru)
  Технические и естественные науки (labirint.ru)
  Технические и естественные науки (Читай-город.ru)
  Общественные и гуманитарные науки (labirint.ru)
  Общественные и гуманитарные науки (Читай-город.ru)
  Медицина (labirint.ru)
  Медицина (Читай-город.ru)
  Иностранные языки (labirint.ru)
  Иностранные языки (Читай-город.ru)
  Иностранные языки (Буквоед.ru)
  Искусство. Культура (labirint.ru)
  Искусство. Культура (Читай-город.ru)
  Экономика. Бизнес. Право (labirint.ru)
  Экономика. Бизнес. Право (Читай-город.ru)
  Экономика. Бизнес. Право (book24.ru)
  Экономика. Бизнес. Право (Буквоед.ru)
  Эзотерика и религия (labirint.ru)
  Эзотерика и религия (Читай-город.ru)
  Наука, увлечения, домоводство (book24.ru)
  Наука, увлечения, домоводство (Буквоед.ru)
  Для дома, увлечения (labirint.ru)
  Для дома, увлечения (Читай-город.ru)
  Для детей (labirint.ru)
  Для детей (Читай-город.ru)
  Для детей (book24.ru)
  Компакт-диски (labirint.ru)
  Художественная литература (labirint.ru)
  Художественная литература (Читай-город.ru)
  Художественная литература (Book24.ru)
  Художественная литература (Буквоед)
Реклама
Разное
  Отправить сообщение администрации сайта
  Соглашение на обработку персональных данных
Другие наши сайты
Приглашаем посетить
  Техника (find-info.ru)

   

Проверка больших чисел на простоту

Проверка больших чисел на простоту

Министерство образования Республики Беларусь

Учреждение образования

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

По дисциплине «Криптография»

По теме «Проверка больших чисел на простоту»

Группы ИИ-5 Олехник Е. В.

Проверил Хацкевич М. В.

Брест 2010


Тема: Проверка больших чисел на простоту. Метод Ферма.

Цель: Изучить методы генерации и проверки на простоту больших чисел.

Ход работы:

Листинг программы:

Program . cs

using System;

using System. Collections. Generic;

using System. Linq;

using System. Text;

{

classProgram

{

staticvoid Main()

{

BigInteger bigInteger;

do

{

SelfDecimatedGenerator generator = newSelfDecimatedGenerator(98); // в конструкторе задаёт длину числав битах

bigInteger = newBigInteger(generator. Generate(), 2); // создаём боооольшое число передаём как первый параметр сроку второй 2-это значит двоичная система

}

while (!Ferma. FermatLittleTest(50, bigInteger));

}

}

}

Ferma. cs

using System;

namespace TaniaKMZILab3

{

staticclassFerma

{

{

if ((thisVal % 2) == 0)

int bits = thisVal. bitCount();

Random rand = newRandom();

for(int round = 0; round < confidence; round++)

{

SelfDecimatedGenerator generator = newSelfDecimatedGenerator(40); // в конструкторе задаёт длину числав битах

a = newBigInteger(generator. Generate(), 2);

BigInteger expResult = a. modPow(thisVal - 1, thisVal);

if(expResult != 1)

{

returnfalse;

}

}

}

}

}

SelfDecimatedGenerator. cs

using System;

using System. Linq;

using System. Collections;

namespace TaniaKMZILab3

{

classSelfDecimatedGenerator

{

privateLFSR lfsr;

privateint k = 10;

privateint d = 23;

public SelfDecimatedGenerator(int length

{

lfsr = newLFSR(length);

}

{

if (lfsr. Quantity())

{

for (int i = 0; i < k; i++)

lfsr. UseRegister();

}

else

{

for (int i = 0; i < d; i++)

lfsr. UseRegister();

}

string bitString = "";

for (int i = 0; i < lfsr. GetBits(). Length; i++)

{

if (lfsr. GetBits()[i] == true)

"1";

else

bitString += "0";

}

return bitString;

}

}

}

LFSR. cs

using System;

using System. Collections. Generic;

using System. Linq;

namespace TaniaKMZILab3

{

classLFSR

{

{

return Array;

}

public LFSR(int lenght)

{

Array = newBitArray(lenght);

Random rnd = newRandom();

for (int i = 0; i < lenght; i++)

{

if ((rnd. Next(0, 1000) % 2) == 0)

{

Array[i] = true;

}

else

{

Array[i] = false;

}

}

}

publicvoid UseRegister()

{

bool feedBack;

feedBack = Array. Get(15) ^ Array. Get(10) ^ Array. Get(15) ^ Array. Get(12);

outBit = Array. Get(Array. Length - 1);

for (int i = 0; i < (Array. Length - 1); i++)

{

Array. Set(Array. Length - i - 1, Array. Get(Array. Length - i - 2));

}

Array. Set(0, feedBack);

}

publicbool Quantity()

{

{

returnfalse;

}

}

}

}

Работа программы:

True

True

34503197996314167362452631497

True

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