My code for encrypting/decrypting message looks like this:
#include <bits/stdc++.h>
using namespace std;
unsigned long long poww(unsigned long long a, unsigned long long k, unsigned long long q)
{
if (k==1)
{
return a%q;
}
unsigned long long w = (poww(a,k/2,q)*poww(a,k/2,q))%q;
if(k%2==1)w=w*a%q;
return w;
}
unsigned long long private_key(unsigned long long public_key, unsigned long long e) {
int x = 1;
while(floor((x*public_key+1)/e) != (x*public_key+1)/e) {
x++;
}
return (x*public_key+1)/e;
}
int main() {
unsigned long long p,q;
p = 47917;
q = 44771;
unsigned long long n = p*q;
unsigned long long public_key = (p-1)*(q-1);
unsigned long long e = 24407;
unsigned long long d = private_key(public_key, e);
unsigned long long message = 6382179;
cout << "Message: " << message << endl;
unsigned long long int encrypted_message = poww(message, e, n);
cout << "Encrypted message: " << encrypted_message << endl;
unsigned long long decrypted_mesage = poww(encrypted_message, d, n);
cout << "Decrypted message: " << decrypted_mesage << endl;
}
After running this, I get:
Message: 6382179
Encrypted message: 1741171325
Decrypted message: 81343779
Why decrypted messages is different from original messages?
I would like to mention that for small number like 67
, this script works fine