👤



Problema: "Criptarea RSA"

Pentru a asigura securitatea comunicațiilor online, unii algoritmi de criptare sunt folosiți pentru a proteja datele. Unul dintre acestea este RSA (Rivest-Shamir-Adleman), care se bazează pe utilizarea unor numere mari prime.

Să presupunem că avem nevoie să criptăm un mesaj folosind RSA. Pas cu pas, să se rezolve următoarele cerințe:

1. Alegerea a două numere prime mari, p și q.
2. Calcularea produsului lor, n = p * q, care va reprezenta cheia publică.
3. Calcularea funcției φ(n) = (p-1) * (q-1), unde φ este funcția phi a lui Euler.
4. Alegerea unui număr întreg e, care să fie coprim cu φ(n), și care va reprezenta un exponent public.
5. Calcularea inversului modular al lui e, notat d, care va fi cheia privată. Aici, d este astfel încât (e * d) mod φ(n) = 1.
6. Criptarea mesajului original folosind cheia publică: C = M^e mod n, unde M este mesajul original.
7. Decriptarea mesajului criptat folosind cheia privată: M = C^d mod n.

Cerință: Să se implementeze un program care să primească un mesaj de la utilizator și să îl cripteze folosind algoritmul RSA, apoi să îl decripteze și să îl afișeze. Programul trebuie să includă toți pașii menționați mai sus și să poată manipula numere mari prime.​