In questa discussione vedremo come creare una crittografia a chiave simmetrica per criptare e decriptare una parola o frase usando Python.
La funzione encrypt prende come input il testo da cifrare e anche una chiave restituendo il testo criptato, questo meccanismo avviene grazie ad un ciclo for.
Per ogni carattere ho utilizzato ord per ottenere il valore ASCII e la chiave viene usata proprio per spostare questi valori.
In seguito usando chr il valore criptato viene trasformato in un carattere normale per poi essere messo insieme alla linea criptata.
Per fare il contrario si usa la funzione decrypt che come si può intuire prende come input il testo criptato e anche la chiave restituendo il testo decriptato, in modo da avere come output il testo cifrato e quello decifrato.
Ovviamente il codice deve essere modificato per applicarlo ad un caso reale, questo è solo un esempio.
Codice:
Ecco il codice che cripta la frase "Ciao, sono Samuele":
def encrypt(text, key):
encrypted_text = ""
for i in range(len(text)):
char = text[i]
encrypted_char = chr(ord(char) + key)
encrypted_text += encrypted_char
return encrypted_text
def decrypt(encrypted_text, key):
decrypted_text = ""
for i in range(len(encrypted_text)):
char = encrypted_text[i]
decrypted_char = chr(ord(char) - key)
decrypted_text += decrypted_char
return decrypted_text
text = "Ciao, sono Samuele!"
key = 3
encrypted_text = encrypt(text, key)
print("Testo cifrato:", encrypted_text)
decrypted_text = decrypt(encrypted_text, key)
print("Testo decifrato:", decrypted_text)
Output:
Schema:
Conclusioni:
Ovviamente la crittografia simmetrica ha pro e contro, molto ottimizzata quindi velocità e soprattutto semplicità d'uso, i problemi stanno a lato sicurezza perché viene usata la stessa chiave viene utilizzata sia per la crittografia che per la decrittografia.
In modo molto semplice:
Chiave viene compromessa = la sicurezza dei dati è compromessa.
Per questo oggi viene usata la crittografia asimmetrica, a doppia chiave, sicuramente più complessa ma moolto più sicura!
Crittografia asimmetrica?
Senza librerie la vedo dura, anche perché ci sarebbe un infinità di codice da scrivere e bisognerebbe anche avere conoscenze matematiche non indifferenti, poi in termini di ottimizzazione lasciamo perdere. Ho trovato la libreria RSA che permette di crearla senza problemi, quindi fatemi sapere se volete la parte 2! Magari anche applicazione ad un app di messaggistica, verrebbe una figata!🤩🤩