RSA

/**
* Программа по дискретной математике
* Шифрование RSS (Для небольших чисел в пределах int)

Алгоритм создания открытого и закрытого ключей
1. Выбираются 2 простых числа p и q.
2. Вычистляется их произведение N=p*q
3. Вычисляется значение функции Эйлера f(p,q)=(p-1)*(q-1)
4. Выбирается простое число e которое взаимопростое с f(p,q)
5. Выбирается число d удовлетворяющее условию e*d mod f(p,q)=1
6. Пара [e,N] – открытый ключ шифрования,Пара [d,N] – закрытый ключ шифрования
7. Тест
*/

#include <iostream>
#include <math.h>
#include <windows.h>
using namespace std;
char*rus (char*);
int main()
{
/**
* Программа по дискретной математике
* Шифрование RSS (Для небольших чисел в пределах int)
 Алгоритм создания открытого и закрытого ключей
 1. Выбираются 2 простых числа p и q.
 2. Вычистляется их произведение N=p*q
 3. Вычисляется значение функции Эйлера f(p,q)=(p-1)*(q-1)
 4. Выбирается простое число e которое взаимопростое с f(p,q)
 5. Выбирается число d удовлетворяющее условию e*d mod f(p,q)=1
 6. Пара [e,N] – открытый ключ шифрования,Пара [d,N] – закрытый ключ шифрования
 7. Тест
*/
// RSA
cout<<rus("Реализация RSA шифрования.")<<endl;
cout<<endl;
// 1 - этап
int p,q;
cout<<rus("1. Введите два простых числа*")<<endl;
cout<<rus("*Простые числа деляться только на себя и 1  -> 2, 3, 5, 7, 11, 13, 17...")<<endl;
cout<<rus("p=");
cin>>p;
cout<<rus("q=");
cin>>q;
cout<<endl;
// 2 - этап
int N;
N=p*q;
cout<<rus("2. N=p*q | N=")<<N<<endl;
cout<<endl;
// 3- этап
int f;
f=(p-1)*(q-1);
cout<<rus("3. f(p,q)=(p-1)*(q-1) | f=")<<f<<endl;
cout<<endl;
// 4- этап
int e;
cout<<rus("4. Введите простое число e ,взаимно простое с (1<e<f) ")<<f<<endl;
cout<<rus("e=");
cin>>e;
cout<<endl;
// 5- этап
int d=1,s;
do {
s=(d*e)%f;
d++;
} while(s!=1);
d=d-1;
cout<<rus("5. Число d | d=")<<d<<endl;
cout<<endl;
// 6 - этап - вывод пар ключей
cout<<rus("Вывод пар ключей")<<endl;
cout<<rus("Публичная пара ключей {e,n} = {")<<e<<","<<N<<"}"<<endl;
cout<<rus("Закрытая пара ключей {d,n} = {")<<d<<","<<N<<"}"<<endl;
cout<<endl;
// Тест
int j,enc,dec,k,m;
cout<<rus("Введите шифруемый текст")<<endl;
cin>>m;
k=1;
for(int i=0;i<e;i++)
k=k*m%N;
k = k%N;
cout<<rus("Зашифровано: ")<<k<<endl;
m=1;
for(int i=0;i<d;i++)
m=m*k%N;
m=m%N;
cout<<rus("Расшифровка: ")<<m<<endl;
}
/**
* Функция перекодировки
*/
char bufer [255];
char*rus (char*s) {
 CharToOem (s,bufer);
 return bufer;
}

Вам также может понравиться ...