lab10

 #include<iostream>

#include<cmath>

using namespace std;

int gcd(int a, int b) {

    return b == 0 ? a : gcd(b, a % b);

}

long long modExp(long long b, long long e, long long m) {

    long long r = 1;

    while (e) {

        if (e % 2) r = (r * b) % m;

        b = (b * b) % m;

        e /= 2;

    }

    return r;

}

long long modInv(long long e, long long phi) {

    long long m0 = phi, x0 = 0, x1 = 1;

    while (e > 1) {

        long long q = e / phi, t = phi;

        phi = e % phi, e = t;

        t = x0, x0 = x1 - q * x0, x1 = t;

    }

    return x1 < 0 ? x1 + m0 : x1;

}

void genKeys(long long &n, long long &e, long long &d) {

    long long p = 61, q = 53, phi;

    n = p * q, phi = (p - 1) * (q - 1);

    e = 17;

    d = modInv(e, phi);

}

long long enc(long long m, long long e, long long n) {

    return modExp(m, e, n);

}

long long dec(long long c, long long d, long long n) {

    return modExp(c, d, n);

}

int main() {

    long long n, e, d, msg, ct, userCt, userD, userN;

    genKeys(n, e, d);

    cout << "Public Key: (" << e << ", " << n << ")\n";

    cout << "Private Key: (" << d << ", " << n << ")\n";

    cout << "Enter message (< " << n << "): ";

    cin >> msg;

    ct = enc(msg, e, n);

    cout << "Encrypted: " << ct << "\n";

    cout << "Enter ciphertext: ";

    cin >> userCt;

    cout << "Enter private key (d): ";

    cin >> userD;

    cout << "Enter modulus (n): ";

    cin >> userN;

    cout << "Decrypted: " << dec(userCt, userD, userN) << endl;

    return 0;

}


Comments

Popular posts from this blog

lab1

lab8

lab9