Menu
Coddy logo textTech

הצפנת סיסמאות בסיסית

שיעור 7 מתוך 8 בקורס פרויקט מערכת הרשמה והתחברות של Coddy.

סיסמאות הן מסוכנות. אם מישהו שאינו מורשה יוכל להשיג את הסיסמאות שלך, הוא יוכל לעשות דברים זדוניים לחשבון שלך. כדי למנוע מאנשים לעשות דברים כאלה, עלינו להצפין את הסיסמאות.

סיסמה מוצפנת היא סיסמה שהומרה לקוד סודי שרק המערכת יכולה להבין. 

לדוגמה, נניח שהסיסמה שלי היא abc וניצור שפה סודית: האות a היא למעשה האות x, האות b היא למעשה האות a והאות c היא למעשה האות v:

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

לבסוף, הסיסמה המוצפנת שלנו היא: xcv. כך אנחנו שומרים אותה במערכת. כעת, אם מישהו יצליח לפרוץ למערכת שלנו ולגנוב את כל הסיסמאות השמורות, הוא ימצא רק סיסמאות מוצפנות שלא אומרות לו דבר.

כעת, כשהמשתמש ינסה להתחבר למערכת, הוא יקליד את הסיסמה הרגילה שלו: abc, ואז המערכת תמיר אותה לסיסמה מוצפנת: xcv ותבדוק אם הסיסמה המוצפנת שהמשתמש הקליד תואמת לסיסמה המוצפנת השמורה במערכת.

הערה: לעולם אל תשתמשו בסוג כזה של הצפנה בתרחיש אמיתי! סוג ההצפנה הזה חלש מדי וקל לפצח אותו.

challenge icon

אתגר

בינוני

יש ליצור משתנה self בשם mapping בעת אתחול (__init__) המערכת, שיאחסן את שפת ההצפנה:

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

יש ליצור מתודה בשם encrypt(self, password) שמחזירה את הסיסמה המוצפנת באמצעות המילון mapping.

לבסוף, כשמישהו מנסה להירשם, יש לשמור את הסיסמה המוצפנת במקום את הסיסמה הרגילה, וכשמישהו מנסה להתחבר, יש לבצע את הבדיקות הנדרשות.

כדי לעשות זאת, יש לבצע את השלבים הבאים:

  • יש ליצור משתנה mapping שמופיע באתגר הזה ולשמור אותו במקום כלשהו במחלקה, כדי שתוכלו לגשת אליו באמצעות המתודה encrypt
  • יש ליצור את המתודה encrypt(self, password) ואז להשתמש בה בשלבים הבאים
  • בעת רישום משתמש, יש לשמור את הסיסמה שלו כסיסמה מוצפנת במילון users
  • כשמשתמש מנסה להתחבר, יש לוודא שמצפינים את הסיסמה שהוזנה ובודקים אם היא תואמת לסיסמה השמורה במילון users

נסו בעצמכם

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

כל השיעורים ביחידה פרויקט מערכת הרשמה והתחברות

3הצפנה

הצפנת סיסמאות בסיסיתשיעור פרויקטמילות סיכום

תרגלו בעצמכם: קומפיילר Python אונליין