1. 해싱 알고리즘 적용하기

# db 폴더 - hasing.py

from passlib.context import CryptContext

pwd_cxt = CryptContext(schemes=['bcrypt'], deprecated='auto')

class Hash():
    def bcrypt(password: str):
        return pwd_cxt.hash(password)

    def verify(hashed_password, plain_password):
        return pwd_cxt.verify(plain_password, hashed_password)
    

db 폴더에 hashing 파일을 하나 생성한다.

from passlib.context import CryptContext

암호관련 패키지를 가져온다.

pwd_cxt = CryptContext(schemes=['bcrypt'], deprecated='auto')

해싱 스키마를 bcrypt 로 설정하고 암호화 해시 알고리즘에서 자동으로 추천되는 버전을 사용하도록 설정한다.

 

Hash 클래스에서

class Hash():
    def bcrypt(password: str):
        return pwd_cxt.hash(password)

문자열로 들어온 평서문 암호를 해시화해서 반환하고 (반환한 해시화된 암호는 데이터베이스에 저장된다)

def verify(hashed_password, plain_password):
    return pwd_cxt.verify(plain_password, hashed_password)

암호 확인 작업이다. 사용자가 입력한 평서문 암호와 해시화 된 암호를 비교해서 일치하면 True, 불일치하면 False를 반환한다.

 

# db-db_user_crud.py
from routers.schemas import UserBase
from sqlalchemy.orm.session import Session
from db.models import DbUser
from db.hashing import Hash

def create_user(db:Session, request: UserBase):
    new_user = DbUser(
        username = request.username,
        password = Hash.bcrypt(request.password)
    )
    db.add(new_user)
    db.commit()
    db.refresh(new_user)
    return new_user

유저 생성 기능에서 입력 받은 암호를 hash.bcrypt의 매개변수로 보내서 해시화된 암호로 받아와 데이터베이스에 저장한다.

 

이 과정에서 관리자도 직접 암호를 볼수 없다.

 

스웨거 UI를 통해서 hasingtest/test 로 유저를 생성했다.

 

tableplus에서 바로 확인 할수 있듯이 암호가 test가 아니라 해싱된 암호로 데이터베이스에 저장되었다

 

(test/1234와 차이를 바로 확인가능하다.) 

+ Recent posts