Dopo aver visto la crittografia simmetrica in Python ora come promesso vediamo la crittografia asimmetrica.
La crittografia asimmetrica (o a doppia chiave) รจ un metodo di crittografia in genere molto sicuro dove la chiave pubblica รจ nota a tutti mentre la chiave privata รจ conosciuta solo dal mittente.
Quando il mittente invia un messaggio viene criptato con la chiave pubblica del destinatario. Il destinatario poi decodifica il messaggio con la sua chiave privata e cosรฌ via.

Ora vediamo un esempio in Python dove ad una chat viene implementata una crittografica asimmetrica tramite libreria RSA:
import rsa
(sam_pub, sam_priv) = rsa.newkeys(512)
(mar_pub, mar_priv) = rsa.newkeys(512)
while True:
sam_msg = input("Samuele: ")
encrypted_msg = rsa.encrypt(sam_msg.encode(), mar_pub)
print("Samuele ha inviato il seguente messaggio cifrato:", encrypted_msg)
decrypted_msg = rsa.decrypt(encrypted_msg, mar_priv).decode()
print("Marco: Ho ricevuto il messaggio decifrato:", decrypted_msg)
mar_msg = input("Marco: ")
encrypted_msg = rsa.encrypt(mar_msg.encode(), sam_pub)
print("Marco ha inviato il seguente messaggio cifrato:", encrypted_msg)
decrypted_msg = rsa.decrypt(encrypted_msg, sam_priv).decode()
print("Samuele: Ho ricevuto il messaggio decifrato:", decrypted_msg)
Output:

Schema di funzionamento:
