문제: 해독이 불가능한 경우에도 원본 비밀번호를 알 수 있을까?
사용자 등록
import hashlib
# 1. 사용자 등록
사용자이름 = input("사용자 이름을 입력하세요: ").strip()
비밀번호 = input("비밀번호를 입력하세요: ").strip()
# 2. 암호화
암호화객체 = hashlib.md5('보안키값'.encode('utf-8'))
암호화객체.update(비밀번호.encode('utf-8'))
암호화된비밀번호 = 암호화객체.hexdigest()
# 3. 파일에 저장
with open('사용자정보', mode='a', encoding='utf-8') as 파일:
파일.write(f"{사용자이름},{암호화된비밀번호}")
사용자 로그인 - 함수 버전
- 권장 구조
- 전역 변수는 반드시 대문자, 지역 변수는 소문자로 사용
- not, 부정 연산자 사용
import hashlib
보안키 = '보안키값'
def 사용자입력():
사용자이름 = input("사용자 이름을 입력하세요: ").strip()
비밀번호 = input("비밀번호를 입력하세요: ").strip()
return 사용자이름, 비밀번호
def md5(문자열):
암호화객체 = hashlib.md5(보안키.encode('utf-8'))
암호화객체.update(문자열.encode('utf-8'))
return 암호화객체.hexdigest()
def 로그인확인(사용자이름, 암호화된비밀번호):
로그인성공 = False
with open('사용자정보', mode='r', encoding='utf-8') as 파일:
for 라인 in 파일:
라인 = 라인.strip()
# 빈 라인이면 건너뛰기
if not 라인:
continue
저장된사용자, 저장된비밀번호 = 라인.split(",")
if 저장된사용자 == 사용자이름 and 저장된비밀번호 == 암호화된비밀번호:
로그인성공 = True
break
return 로그인성공
def 사용자정보가져오기():
사용자사전 = {}
with open('사용자정보', mode='r', encoding='utf-8') as 파일:
for 라인 in 파일:
라인 = 라인.strip()
# 빈 라인이면 건너뛰기
if not 라인:
continue
저장된사용자, 저장된비밀번호 = 라인.split(",")
사용자사전[저장된사용자] = 저장된비밀번호
return 사용자사전
def 실행():
# 1. 사용자 등록
# 사용자이름, 비밀번호 = 사용자입력()
# 2. 비밀번호 암호화
# 암호화된비밀번호 = md5(비밀번호)
# 3. 파일에 저장
# with open('사용자정보', mode='a', encoding='utf-8') as 파일:
# 파일.write(f"{사용자이름},{암호화된비밀번호}")
# 1. 사용자 로그인
사용자이름, 비밀번호 = 사용자입력()
# 2. 비밀번호 암호화
암호화된비밀번호 = md5(비밀번호)
# 3. 파일 읽기 + 암호화된 비밀번호 비교(간단) 로그인 시, 비교 방법 1
로그인성공 = 로그인확인(사용자이름, 암호화된비밀번호)
if 로그인성공:
print('로그인 성공')
else:
print('로그인 실패')
# 비교 방법 2:
사용자사전 = 사용자정보가져오기()
db비밀번호 = 사용자사전.get(사용자이름)
if db비밀번호 == 암호화된비밀번호:
print('로그인 성공')
else:
print('로그인 실패')
if __name__ == '__main__':
실행()