파이썬, 아이디와 비밀번호('*' 출력) 입력, 암호화, 비교, 로그인 처리

 

글. 수알치 오상문

 

파이썬 터미널 화면에서 아이디와 비밀번호를 입력 받아서 로그인 처리를 하는 예제입니다.

 

1. 비밀번호는 sha256 해시 암호화하여 처리합니다.

2. 이용자가 존재하지 않거나 비밀번호가 다르면 로그인에 실패합니다.

3. 입력받은 비밀번호도 sha256 해시 암호화를 하여 비교합니다.

4. 비밀번호 입력 시 '*' 문자로 보여줍니다. 

    리눅스와 윈도우 운영체제에 따라 처리가 다르니 소스 코드 참고하세요.

 

[주의] 비밀번호 입력 시 문자 키가 아닌 키를 입력하면 오류가 발생할 수 있습니다.

 

import hashlib
# import getpass  # Linux 비밀번호 입력 (Windows에서는 echo 기능 지원 안함)
import msvcrt  # Windows 비밀번호 입력

# 이용자 계정 정보  
users = {"a":"1111","b":"2222","c":"3333","d":"4444","e":"5555"}

# 이용자의 비밀번호를 단방향 해시 값으로 변경
for id, pw in users.items():
    users[id] = hashlib.sha256(pw.encode("utf-8")).hexdigest()


def get_password(prompt='Password: '):
    password = ""
    print(prompt, end='')

    while True:
        ch = msvcrt.getch().decode("utf-8")
        if ch == "\r" or ch == "\n":
            break
        password += ch
        print("*", end="", flush=True)    

    print()
    return password


# 아이디, 비밀번호 입력받기    
ID = input("Your ID: ")
# 비밀번호 입력시 내용 숨기기
# password = getpass.getpass() (prompt="Password: ", stream=None, echo="#")  # Linux
password = get_password()  # Windows

# 비밀번호는 sha256 암호화  
password = hashlib.sha256(password.encode("utf-8")).hexdigest()

# print(password)

# 아이디가 존재하는지 확인
if ID in users.keys() and password == users[ID]:        
    print("Login success!")
else:
    print("Login failed!")

 

[실행 화면]

Your ID: a
Password: ****
Login success!

 

 

반응형

+ Recent posts