Python Tutorial: sviluppiamo un Password Generator

Nell’articolo di oggi scriviamo il codice per sviluppare un piccolo Password Generator in Python che ci permetterà di generare password sicure e personalizzabili

Sviluppare programmi utili in Python è un ottimo modo per esercitarsi e capire bene come utilizzare questo fantastico linguaggio di programmazione. Uno dei casi più semplici ma allo stesso tempo completo per fare una cosa del genere, è quello che andiamo a trattare oggi: generare una password sicura. Il tutorial di oggi è semplice perché usa solo costrutti molto basic ed elementari di Python, ma è abbastanza completo perché ne usa molti e li combina insieme.

In particolare, in questo tutorial vedremo:

  • Come scrivere una funzione in Python
  • Come gestire input da parte degli utenti
  • Lavorare sulle liste in Python
  • Estrarre randomicamente un elemento da una lista
  • Come fare un ciclo for in Python
  • Come concatenare insieme elementi di una lista per generare una stringa

Andremo quindi a scrivere il codice per generare una password basata sugli input di un utente, con diverse possibili configurazioni.

Perché partire proprio con un generatore di password per questo tutorial?

Una password è una stringa dalla lunghezza variabile che combina insieme tipi diversi di caratteri: ci possono essere lettere maiuscole e minuscole, numeri, simboli particolari. Inoltre, a parità di caratteri, può cambiare il loro ordine.

Il nostro generatore permetterà di applicare diverse configurazioni che l’utente potrà inserire come input: lunghezza della password, presenta di maiuscole e minuscole, presenza di numeri e e presenza di caratteri speciali.

LUNGHEZZA DELLA PASSWORD

Per lunghezza intendiamo il numero di caratteri che comporranno la nostra password. Per chiedere un input da parte di un utente possiamo usare la funzione input() di Python:

length = input("Quanti caratteri vuoi nella tua password? Inserisci un numero")

Nella variabile length abbiamo quindi la lunghezza della password. Questa informazione è di tipo stringa e andrà convertita in intero, e sarà uno degli argomenti della funzione che poi andrà a prendere tutti gli input per generare la password.

Presenza di numeri e caratteri

Qui chiediamo all’utente se vuole nella password numeri e/o caratteri numerici, e lo facciamo con una variabile binaria: yes/no.

number = input("Vuoi che la tua password contenga numeri? Digita 'yes' o 'no'")

symbol = input("Vuoi che la tua password contenga simboli? Digita 'yes' o 'no'")

costruiamo la funzione

Adesso sappiamo quanti caratteri avrà la nostra password e sappiamo se ha numeri e/o simboli.

Per generare la passoword, definiremo una funzione che prende in input i nostri tre argomenti: ength,number,symbol. Inizializziamo una lista vuota che conterrà tutti i caratteri della nostra password.

def GeneratePassword(length,number,symbol):
lista_caratteri = []

Se number == “yes”, prendiamo casualmente un numero da 0 a 9, e facciamo lo stesso per symbol.

if number == "yes":
    number = random.choice(string.digits)
    lista_caratteri.append(number)

if symbol == "yes":
    symbol = random.choice(["?","!","^","_","@","$","%"])
    lista_caratteri.append(symbol)

Se i nostri parametri saranno valorizzati a “yes” avremo aggiunto i corrispettivi caratteri nella nostra lista di caratteri, altrimenti la lista rimarrà vuota.

A questo punto, il numero di lettere che dobbiamo prendere sarà length – len(lista_caratteri). Il risultato di questa sottrazione, sarà il numero di lettere che dovremmo generare per completare la password.

le lettere della password

Costruiamoci la variabile numero_lettere, data dalla lunghezza della password meno la lunghezza dei caratteri finora elaborati.

numero_lettere = int(length) - len(lista_caratteri)

A questo punto prendiamo random delle lettere maiuscole e minuscole e uniamole insieme in una stringa:

for index in range(numero_lettere):
lista_caratteri.append(random.choice(string.ascii_letters))

Il codice sopra non fa altro che prendere random una lettere maiuscola o minuscola (random.choice(string.ascii_letters)) per un certo numero di volte (ovvero il numero di lettere richiesto) e appenderla alla lista in cui sono già presenti numeri e simboli.

COLLEGHIAMO TUTTI I PEZZETTI

Ora abbiamo veramente tutto l’occorrente. La nostra lista avrà una faccia simile a questa:

['4', '?', 'z', 'Q', 'W', 'f', 'h', 'J', 'A', 'w', 'R', 'b', 'q', 'k', 'Z', 'N', 'N', 'n', 'R', 't', 'W', 'h']

L’ultimo step sarà quello di attaccare insieme gli elementi della lista. Prima però mettiamo ancora un po’ di entropia e facciamo uno shuffle, ovvero cambiamo la posizione degli elementi nella lista:

random.shuffle(lista_caratteri)

Infine, attacchiamoli insieme:

password = "".join(lista_caratteri)

codice completo

code password
Codice completo

Nell’articolo di oggi abbiamo visto un tutorial per generare un Password Generator in Python. Nello svolgere questo piccolo esercizio, abbiamo iniziato a prendere dimestichezza con alcuni elementi base e fondamentali di Python.