#include<stdlib.h>
#include<iostream>
#include<math.h>
#include<string>
using namespace std;
long int nod(long int a, long int b){
int j,i;
if (a>b) i=b; else i=a;
for (j=i;j>=1;--j)
if ((a%j == 0) && (b%j==0)) {
return j;
break;
}
}
long int modinv (long int a, long int m) {
int i,b;
int x,j,y,c;
b = m;
c = a;
i = 0;
j = 1;
while (c != 0) {
x = b/c;
y = b%c;
b = c;
c = y;
y = j;
j = i - j * x;
i = y;
}
if (i < 0) i = i+m;
return i;
}
#pragma argsused
int main(int argc, char* argv[])
{
long int P,Q,N,Ne,E,D,cs,ta;
P=random()/900000000%1000; cout<<P<<"\n";
Q=random()/90000000%250; cout<<Q<<"\n";
N= P*Q;
Ne=(P-1)*(Q-1);
E=3;
ta=Ne;
while (nod(E,ta)!=1) E+=2;
double cc=pow(E,Ne-1); cout<<cc;
D=modinv(E,Ne);
std::cout<<E<<"-"<<N<<"\n";
std::cout<<D<<"-"<<N<<"\n";
string tmp,coded,decoded;
char buf[102];
int liter,i,kil;
getline(cin,tmp);
long int C[255];
for (i=0; i<tmp.size(); i++) {
liter=int(tmp);
C=(int)pow(liter,E);
snprintf(buf,10,"%d",C);
coded+=buf;
}
kil=i;
cout<<coded<<"\n";
for (int i=0; i<kil; i++) {
liter=int(tmp);
cout<<(char)((int)pow(C,D)%N)<<"\n";
}
return 0;
}
шифрование RSA
Делаю шифрование RSA с небольшим ключем, но при (int)pow(C,D)%N возвращает число C