lab11
#include <iostream>
#include <cmath>
using namespace std;
long long modExp(long long b, long long e, long long m) {
long long r = 1;
while (e > 0) {
if (e % 2 == 1)
r = (r * b) % m;
b = (b * b) % m;
e /= 2;
}
return r;
int main() {
long long p, g, a, b, A, B, sA, sB;
cout << "Enter a prime number (p): ";
cin >> p;
cout << "Enter a primi ve root (g): ";
cin >> g;
cout << "User A, enter your private key (a): ";
cin >> a;
cout << "User B, enter your private key (b): ";
cin >> b;
A = modExp(g, a, p);
B = modExp(g, b, p);
cout << "Public Key formula: (g^Private Key) % p\n";
cout << "User A's public key = (" << g << "^" << a << ") % " << p << " = " << A << endl;
cout << "User B's public key = (" << g << "^" << b << ") % " << p << " = " << B << endl;
sA = modExp(B, a, p);
sB = modExp(A, b, p);
cout << "Shared Secret Key formula: (Received Public Key ^ Private Key) % p\n";
cout << "User A's shared secret key = (" << B << "^" << a << ") % " << p << " = " << sA << endl;
cout << "User B's shared secret key = (" << A << "^" << b << ") % " << p << " = " << sB << endl;
if (sA == sB) {
cout << "Key exchange successful! Shared secret key: " << sA << endl;
} else {
cout << "Error in key exchange!" << endl;
}
return 0;
}
Comments
Post a Comment