#include<iostream>
#include<math.h>
#include<string>
using namespace std;
int gcd(int n,int m)
{
if(m<=n && n%m ==0)
return m;
if(n<m)
return gcd(m,n);
else
return gcd(m,n%m);
}
int REncryptText(char m)
{
int p = 11, q = 3;
int e = 3;
int n = p * q;
int phi = (p - 1) * (q - 1);
int check1 = gcd(e, p - 1);
int check2 = gcd(e, q - 1);
int check3 = gcd(e, phi);
// // Compute d such that ed = 1 (mod phi)
//i.e. compute d = e-1 mod phi = 3-1 mod 20
//i.e. find a value for d such that phi divides (ed-1)
//i.e. find d such that 20 divides 3d-1.
//Simple testing (d = 1, 2, ...) gives d = 7
// double d = Math.Pow(e, -1) % phi;
int d = 7;
// public key = (n,e) // (33,3)
//private key = (n,d) //(33 ,7)
double g = pow(m,e);
int ciphertext = g %n;
// Now say we want to encrypt the message m = 7, c = me mod n = 73 mod 33 = 343 mod 33 = 13. Hence the ciphertext c = 13.
//double decrypt = Math.Pow(ciphertext, d) % n;
return ciphertext;
}
int main()
{
char plaintext[80],str[80];
cout<<" enter the text you want to encrpt";
cin.get(plaintext,79);
int l =strlen(plaintext);
for ( int i =0 ; i<l ; i++)
{
char s = plaintext[i];
str[i]=REncryptText(s);
}
for ( int i =0 ; i<l ; i++)
{
cout<<"the encryption of string"<<endl;
cout<<str[i];
}
return 0;
}