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.
Sfida
MedioCrea 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
mappingfornita in questa sfida e salvala da qualche parte nella classe, così da poterla accedere tramite il metodoencrypt - 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
Esercitati da solo: Compilatore Python online