Menu
Coddy logo textTech

Podstawowe szyfrowanie haseł

Lekcja 7 z 8 w kursie Projekt systemu rejestracji i logowania w Coddy.

Hasła są niebezpieczne. Jeśli osoba nieupoważniona uzyska dostęp do twoich haseł, może wyrządzić szkody na twoim koncie. Aby temu zapobiec, musimy szyfrować hasła.

Zaszyfrowane hasło to takie, które zostało przekształcone w tajny kod zrozumiały tylko dla systemu. 

Załóżmy na przykład, że moje hasło to abc i stwórzmy tajny język: litera a to tak naprawdę litera x, litera b to tak naprawdę litera a, a litera c to tak naprawdę litera v:

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

Ostatecznie nasze zaszyfrowane hasło to: xcv. W takiej postaci zapisujemy je w systemie. Jeśli ktoś zdoła włamać się do naszego systemu i wykraść wszystkie zapisane hasła, znajdzie tylko zaszyfrowane hasła, które nic mu nie powiedzą.

Gdy użytkownik będzie próbował zalogować się do systemu, wpisze swoje zwykłe hasło: abc. System przekształci je wtedy w zaszyfrowane hasło: xcv i sprawdzi, czy zaszyfrowane hasło wpisane przez użytkownika jest zgodne z zaszyfrowanym hasłem zapisanym w systemie.

Uwaga: Nigdy nie używaj tego rodzaju szyfrowania w prawdziwym życiu! Ten rodzaj szyfrowania jest zbyt słaby i łatwo go złamać.

challenge icon

Wyzwanie

Średni

Utwórz zmienną self o nazwie mapping podczas inicjalizacji (__init__) systemu. Będzie ona przechowywać język szyfrowania:

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"
}

Utwórz metodę o nazwie encrypt(self, password), która zwraca zaszyfrowane hasło za pomocą słownika mapping.

Na koniec, gdy ktoś spróbuje się zarejestrować, zapisz zaszyfrowane hasło zamiast zwykłego. Gdy ktoś spróbuje się zalogować, przeprowadź odpowiednie sprawdzenie.

Aby to zrobić, wykonaj następujące kroki:

  • Utwórz zmienną mapping podaną w tym wyzwaniu i zapisz ją gdzieś w klasie, aby można było uzyskać do niej dostęp za pomocą metody encrypt
  • Utwórz metodę encrypt(self, password), a następnie użyj jej w kolejnych krokach
  • Podczas rejestrowania użytkownika zapisz jego hasło w zaszyfrowanej postaci w słowniku users
  • Gdy użytkownik spróbuje się zalogować, zaszyfruj podane hasło i sprawdź, czy pasuje ono do hasła zapisanego w słowniku users

Spróbuj swoich sił

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")

Wszystkie lekcje w sekcji Projekt systemu rejestracji i logowania

3Szyfrowanie

Podstawowe szyfrowanie hasełLekcja projektowaSłowo na zakończenie

Poćwicz samodzielnie: Kompilator Python online