개발학습일지

[Restful API] 비밀번호 단방향 암호화와 확인하는 코드 _ pbkdf2_sha256 사용 본문

Restful API

[Restful API] 비밀번호 단방향 암호화와 확인하는 코드 _ pbkdf2_sha256 사용

처카푸 2024. 5. 22. 15:14

비밀번호 단방향 암호화와 유저가 로그인할 때 비밀번호가 맞는지 확인하는 코드

 - pbkdf2_sha256 사용 -

 

 

비밀번호 처리  - 라이브러리 설치 및 함수

$ pip install psycopg2-binary
$ pip install passlib

- 설치 명령어 설명 _ pypi 사이트

https://pypi.org/project/psycopg2-binary/

 

psycopg2-binary

psycopg2 - Python-PostgreSQL Database Adapter

pypi.org

https://pypi.org/project/passlib/

 

passlib

comprehensive password hashing framework supporting over 30 schemes

pypi.org

비밀번호 처리 라이브러리 설치

 

 

비밀번호 단방향으로 암호화하고 비밀번호 맞는지 체크하는 함수 만드는 코드 작성

- 필요한 함수들을 만들어둘 utils.py 파일 만들기

- 설치한 라이브러리 hash에  pbkdf2_sha256 를 사용한다.

from passlib.hash import pbkdf2_sha256
from config import Config

# * Config.SALT 사용
# 원문 비밀번호를, 단방향으로 암호화 하는 함수
def hash_password(original_password) :
    original_password = original_password + Config.SALT
    password = pbkdf2_sha256.hash(original_password) 
    return password

# 유저가 로그인할때, 입력한 비밀번호가 맞는지 체크하는 함수.
def check_password(original_password, hashed_password) :
    original_password = original_password + Config.SALT
    return pbkdf2_sha256.verify(original_password, hashed_password)

 

코드를 완성했다면, 단위테스트( unit test ) 해보자. 

- 해당 폴더만 실행하는 코드

$ python utils.py

- 확인하는 코드

hashed_password = hash_password('1234')
print(hashed_password)

check = check_password('1234', '$pbkdf2-sha256$29000$RYhRSkkpRUjJGcP4X8t5Lw$2DJ5RPWfHBqGdcmPbwcLipOlcHJdx/i82Kp4GFxLyuY' )
print(check)

- 답변 : 비밀번호 생성, 확인하는 코드는 True/False 로 답을 준다.


* 원본 암호에 더하는 문자를 Config.SALT 사용하는 이유

랜덤의 seed 값 처럼 이 값을 알면 유저의 비밀번호를 누구나 예상할 수 있기 때문에 보안으로 처리해 준다.

config.py에 SALT 변수로 저장하여 사용한다.