나는 이렇게 학습한다/Library

SQLAlchemy, ‘PasswordType’으로 손쉽게 암호화하자

daco2020 2022. 4. 12. 19:16
반응형

PasswordType 이란?

sqlalchemy를 이용해 model 클래스에서 PasswordType을 적용할 수 있습니다.

PasswordType을 적용한 model은 사용자가 입력한 패스워드를 자동으로 암호하하여 데이터베이스에 저장합니다.

 

모델 컬럼 타입을 지정한 것만으로 개발자가 따로 암호화 로직을 구현하지 않아도 되는 것입니다.

 

 

 

패스워드 암호화 저장

PasswordType을 사용하기 위해서는 먼저 SQLAlchemy-Utils를 설치해야합니다.

pip install sqlalchemy-utils

 

 

설치가 완료되었다면 model파일에 import 해줍니다.

# models.py

from sqlalchemy_utils import PasswordType

 

 

import 후 아래에 User model을 작성해보았습니다.

 

이메일과 패스워드를 받는 간단한 회원가입 모델입니다.

# models.py

class User(Base):
    __tablename__ = "user"

    id = Column(Integer, primary_key=True)
    email = Column(String)
    password = Column(
        PasswordType(schemes=["pbkdf2_sha512", "md5_crypt"], 
        deprecated=["md5_crypt"]),
    )

pbkdf2_sha512 는 암호를 해시하는데 사용됩니다.

md5_crypt 는 이후 패스워드를 비교할 때 사용됩니다.

 

 

이렇게 모델 컬럼에 타입을 지정한 것만으로 회원가입 암호화 로직이 끝났습니다.

 

 

패스워드 확인

패스워드 확인방법도 굉장히 쉽습니다.

 

먼저 유저 객체를 만들어 패스워드를 넣어보겠습니다. 

user = User()
user.password = 'b'
# >>> '$5$rounds=80000$H.............'

패스워드를 넣으면 자동으로 암호화되어 저장됩니다.

 

 

 

유저 객체의 패스워드를 아까 입력한 ‘b’와 일치여부를 물으면 True를 반환합니다.

user.password == 'b'
# >>> True

??

벌써 확인이 끝났습니다!

 

 

개발자는 암호화와 마찬가지로 복호화 로직 또한 작성하지 않아도 됩니다.

아주 간편하게 회원가입과 패스워드 일치여부 기능이 구현되었습니다.

 

 

 

데이터베이스에서 암호화, 복호화가 필요하다면 SQLAlchemy-Utils의 PasswordType을 사용해보세요!

 

 

 

*자세한 내용은 공식문서를 참고해주세요.

 

Data types — SQLAlchemy-Utils 0.38.3 documentation

Installation CompositeType automatically attaches before_create and after_drop DDL listeners. These listeners create and drop the composite type in the database. This means it works out of the box in your test environment where you create the tables on eac

sqlalchemy-utils.readthedocs.io

 

 

반응형