[python] Semplice programma di crittografia dei file con password

Il nostro obiettivo di oggi è criptare un file proteggendolo con una password in Python.

Anzitutto abbiamo bisogno della libreria cryptography. Per installarla utilizziamo come al solito PIP:

pip install cryptography

Per i neofiti basta aprire il Terminale su Windows (WIN+R e digitare cmd) ed eseguire il comando.

Quello che andremo a realizzare sarà un semplice programma da Terminale, dove ci siano due opzioni, una per criptare e una per decriptare il file. Il programma dovrà comportarsi più o meno in questo modo:

Anzitutto cominciamo col creare la base del nostro programma, che si svolgerà tutto in un ciclo while infinito. Dobbiamo prevedere 3 opzioni: crittare il file, decrittare il file e un’opzione per uscire/terminare il programma (questa è la prima opzione che implementeremo, per evitare di restare bloccati nell’esecuzione infinita):

Dalla libreria cryptography importeremo Fernet per la crittografia simmetrica, le caratteristiche salienti del sistema Fernet sono:

  1. Crittografia simmetrica: Utilizzo della medesima chiave per cifrare e decifrare i dati
  2. Sicurezza: gli algoritmi di cifratura utilizzati sono del tipo AES in modalità CBC con una chiave da 128 bit
  3. Autenticazione dei dati: include HMAC per garantire, laddove necessario, l’integrità e l’autenticità dei dati cifrati

La più blanda implementazione di questo algoritmo potrebbe essere fatta nel modo seguente:

Il risultato sarà qualcosa del genere:

In questo caso, faccio notare, abbiamo usato una chiave generata direttamente dal programma, mentre quello che vogliamo fare in questo esercizio è usare una password come chiave di crittografia.

A tale scopo implementiamo una funzione di creazione della chiave a partire da una password data dall’utente:

A questo punto possiamo passare all’implementazione del resto del programma.

Anzitutto gestiamo la scelta 1, dove chiederemo all’utente di darci il percorso del file e una password da usare per la crittazione.

Faccio notare come in questa parte richiediamo in input un percorso per il file e usiamo getpass per acquisire la password (funzionerà sul Terminale, mentre sull’IDLE Shell la password sarà esposta in chiaro!).

Una volta acquisito il nome/percorso del file, verifichiamo se effettivamente esiste, in tal caso lo apriamo in lettura con l’opzione rb (per leggere in modo binario), creiamo la chiave a partire dalla password e cifriamo il file.

Per la decrittazione l’operazione sarà analoga, ma alla rovescia:

Il codice complessivo sarà così:

 

Rispondi

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.