Menu
Coddy logo textTech

Cifratura di base delle password

Lezione 7 di 8 del corso Progetto: sistema di registrazione e accesso di Coddy.

Le password sono pericolose. Se qualcuno non autorizzato riesce a ottenere le tue password, può compiere azioni dannose sul tuo account. Per impedire alle persone di fare cose del genere, dobbiamo crittografare le password.

Una password crittografata è una password convertita in un codice segreto che solo il sistema può comprendere. 

Per esempio, supponiamo che la mia password sia abc e creiamo un linguaggio segreto: la lettera a è in realtà la lettera x, la lettera b è in realtà la lettera a e la lettera c è in realtà la lettera v:

a -> x
b -> c
c -> v 

Infine, la nostra password crittografata è: xcv. È così che la salviamo nel sistema. Ora, se qualcuno riuscisse a violare il nostro sistema e a rubare tutte le password memorizzate, troverebbe solo password crittografate che per lui non significano nulla.

Ora, quando l'utente proverà ad accedere al sistema, digiterà la sua password normale: abc; il sistema la convertirà quindi in una password crittografata: xcv e controllerà se la password crittografata digitata dall'utente corrisponde a quella memorizzata nel sistema.

Nota: non usare mai questo tipo di crittografia in situazioni reali! Questo tipo di crittografia è troppo debole e facile da violare.

challenge icon

Sfida

Medio

Crea una variabile self chiamata mapping durante l'inizializzazione (__init__) del sistema, che memorizzi il linguaggio di crittografia:

mapping = {
   "a" : "i", "b" : "l", "c" : "q", "d" : "f", "e" : "z", "f" : "s",
   "g" : "a", "h" : "g", "i" : "e", "j" : "p", "k" : "w", "l" : "o",
   "m" : "v", "n" : "u", "o" : "b", "p" : "j", "q" : "k", "r" : "n",
   "s" : "x", "t" : "d", "u" : "h", "v" : "y", "w" : "t", "x" : "m",
   "y" : "r", "z" : "c"
}

Crea un metodo chiamato encrypt(self, password) che restituisca la password crittografata usando il dizionario mapping.

Infine, quando qualcuno prova a registrarsi, salva la password crittografata invece di quella normale e, quando qualcuno prova ad accedere, esegui i controlli necessari.

Per farlo, segui i passaggi:

  • Crea una variabile mapping fornita in questa sfida e salvala da qualche parte nella classe, così da poterla accedere tramite il metodo encrypt
  • Crea il metodo encrypt(self, password) e poi usalo per i passaggi successivi
  • Quando registri un utente, salva la sua password come password crittografata nel dizionario users
  • Quando un utente prova ad accedere, assicurati di crittografare la password fornita e controlla che corrisponda alla password salvata nel dizionario users

Provalo tu

class LoginSystem:
    def __init__(self):
        self.users = {}
        self.logged_users = set()
    
    def register(self, username, password):
        if username not in self.users:
            self.users[username] = password
            print("user registered successfuly")
        else:
            print("user already exists")
    
    def login(self, username, password):
        if username in self.users:
            if password == self.users[username]:
                self.logged_users.add(username)
                print("user logged in successfully")
            else:
                print("password doesn't match")
        else:
            print("user isn't in the system")
    
    def sign_out(self, username):
        if username not in self.users:
            print("user is not in the system")
        elif username not in self.logged_users:
            print("user is not logged in")
        else:
            self.logged_users.remove(username)
            print("user signed out successfully")

Tutte le lezioni di Progetto: sistema di registrazione e accesso

3Crittografia

Cifratura di base delle passwordLezione di progettoConsiderazioni finali

Esercitati da solo: Compilatore Python online