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!🤩🤩

    Samueleex wow, molto interessante!! 😀 In questo caso l'esempio è di tipo lineare, quindi del tipo +key per criptare e -key (operazione inversa a prima) per decriptare. Ovviamente, oltre alla differenza fra crittografia simmetrica e asimmetrica (quindi chiave pubblica e chiave privata, diverse), pensiamo anche a queste considerazioni:

    • lo stesso codice sorgente di crittografia è bene che non sia poi reso visibile in chiaro, senza modifiche di oscuramento (linguaggio interpretato come Python)
    • oltre ad una funzione lineare (quindi del tipo +key e -key), possiamo avere una funzione matematica più complessa a piacere, pur essendo sempre invertibile (ovvero da y=f(x) posso ricavare x=f-1(y)); questo rende un'ipotetica procedura di decriptazione più complessa, non essendo lineare
    • funzione di hash: una funzione NON invertibile (quindi matematicamente non esiste, non è definita x=f-1(y) partendo da y=f(x)), che converte quindi una stringa di lunghezza arbitraria: pensiamo ad esempio a SHA-256 di Bitcoin e in generale la sicurezza della Blockchain. Quindi salvo tentativi basati unicamente su brute-force e improponibili in termini computazionali (da qui appunto la sicurezza di questi algoritmi!), la soluzione è semplicemente avere a disposizione la chiave privata dato che non c'è modo di decriptare e comprendere la chiave pubblica e accedere quindi alle informazioni contenute, criptate

    Powered by: FreeFlarum.
    (remove this footer)