К основному контенту

Схема разделения секрета Шамира C++

Здесь приведена схема ТОЛЬКО распределения секрета, восстановление секрета я пока осилить не могу. Уравнения Лагранжа не понимаю как задать алгоритмически.
Повторюсь про авторские права, попрошу их не нарушать и осведомлять о использовании кода. Отказывать никому я не собираюсь, но осведомлять прошу.


#include "stdafx.h"
#include <iostream>
#include <vector>
#include <ctime>
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
srand(time(0));
int secretM;
int participantN;
int sufficientK;
cout << "Enter secret" << endl;
cin >> secretM;
cout << "enter the number of participants" << endl;
cin >> participantN;
cout << "enter a sufficient number of participants to recover secret" << endl;
cin >> sufficientK;
int primeP = secretM + 1;
bool prime(long long);
while (primeP != 0)
{
if (prime(primeP))
break;
else
primeP++;
}
const int power = sufficientK - 1;
vector<int> arrayA;
for (int i = 0; i < power; i++)
arrayA.insert(arrayA.end(), rand() % 20 +1);

vector<int> arrayK;
for (int i = 0; i < participantN; i++)
{
int temp = 0;
for (int j = 0; j < power; j++)
{
temp += arrayA[j] * (pow(i+1, power-j));
}
arrayK.insert(arrayK.end(), (temp + secretM)%primeP);
}
cout << "threshold scheme: (" <<sufficientK << ", " << participantN << ")" << endl; //пороговая схема
cout << "prime number: " << primeP << ", the degree of the polynomial: " << power << endl;
for (int i = 0; i<participantN; i++)
cout << i+1 << " participant. personal secret: " << arrayK[i] << endl;
return 0;
}

bool prime(long long n)

    for(long long i=2;i<=sqrt(n);i++)
        if(n%i==0)
            return false;
    return true;
}

Комментарии

  1. Я ухватился за возможность приобрести недвижимость в аренду на 4-е число выходных. Г-н Ли быстро ответил, и, поскольку я впервые получил ссуду на покупку арендуемой собственности, он смог помочь мне пройти через процесс ссуды. Это был отличный опыт работы с хорошим и любезным кредитором г-ном Ли. Я надеюсь, что очень хорошо знаю, если вы ищете ссуду для покупки недвижимости или финансирования бизнеса, тогда г-н Ли сможет помочь вам с таким процессом, здесь его данные WhatsApp + 1-989-394-3740. / 247officedept@gmail.com

    ОтветитьУдалить

Отправить комментарий

Популярные сообщения из этого блога

ВОПРОС К ЧИТАТЕЛЯМ

Уважаемые читатели моего блога и просто проходящие мимо! У меня появилась идея заняться созданием уроков по интересующим вас темам. Предпочтительно на C++, но не ограничиваясь ими, я хочу поделиться своими знаниями не только в виде готового кода но и подробными объяснениями что к чему. Прошу вас, если вы имеете идею и хотели бы разобраться в какой-то теме - отпишитесь в комментариях, что было бы вам интересно. Постараюсь помочь. 

7 глава, Лафоре Р

*1. Напишите функцию reversit(), которая переворачивает строку (массив типа char). Используйте цикл for, который меняет местами первый и последний символы, затем следующие и т. д. до предпоследнего. Строка должна пере- даваться в функцию reversit() как аргумент. Напишите программу для выполнения функции reversit(). Программа долж- на принимать строку от пользователя, вызывать функцию reversit(), а за- тем выводить полученный результат. Используйте метод ввода, который позволяет использовать внутренние пробелы. Протестируйте программу на примере фразы «Аргентина манит негра».

6 глава, Лафоре Р

*1. Создайте класс Int, имитирующий стандартный тип int. Единственное поле этого класса должно иметь тип int. Создайте методы, которые будут устанавливать значение поля, равным нулю, инициализировать его целым значением, выводить значение поля на экран и складывать два значения типа Int. Напишите программу, в которой будут созданы три объекта класса Int, два из которых будут инициализированы. Сложите два инициализирован- ных объекта, присвойте результат третьему, а затем отобразите результат на экране.