[python] Peewee에서의 암호화 처리하기

Peewee는 파이썬으로 작성된 간단하고 가벼운 ORM(Object Relational Mapping) 라이브러리입니다. 암호화는 사용자 비밀번호와 같은 민감한 정보를 안전하게 저장하기 위해 중요한 요소입니다. 이번 포스트에서는 Peewee를 사용하여 데이터베이스에서 암호화 처리하는 방법에 대해 알아보겠습니다.

패스워드 암호화

Peewee에서 암호화를 처리하기 위해 passlib 패키지를 사용할 수 있습니다. passlib는 다양한 암호화 해시 함수를 제공하며, 사용자의 비밀번호를 안전하게 저장할 수 있도록 도와줍니다. 먼저 passlib를 설치해야합니다.

pip install passlib

다음은 Peewee 모델에서 비밀번호를 암호화하는 방법입니다.

from passlib.hash import pbkdf2_sha256

class User(Model):
    username = CharField(unique=True)
    password = CharField()

    def set_password(self, password):
        self.password = pbkdf2_sha256.hash(password)

    def verify_password(self, password):
        return pbkdf2_sha256.verify(password, self.password)

위의 예제에서 set_password 메서드는 입력된 비밀번호를 암호화하고 self.password에 저장합니다. verify_password 메서드는 입력된 비밀번호와 self.password를 비교하여 일치하는지 확인합니다.

암호화된 비밀번호 저장하기

Peewee를 사용하여 사용자의 비밀번호를 암호화 한 후, 데이터베이스에 저장해야합니다. 예를 들어, 사용자를 생성하는 POST 요청을 처리하는 Flask 애플리케이션의 코드는 다음과 같을 수 있습니다.

from flask import Flask, request
from peewee import SqliteDatabase

app = Flask(__name__)
db = SqliteDatabase('users.db')

@app.route('/users', methods=['POST'])
def create_user():
    username = request.form['username']
    password = request.form['password']

    user = User(username=username)
    user.set_password(password)
    user.save()

    return 'User created successfully'

if __name__ == '__main__':
    app.run()

위의 코드에서 사용자의 비밀번호는 set_password 메서드를 사용하여 암호화되고, user.save()를 호출하여 데이터베이스에 저장됩니다.

비밀번호 검증

사용자가 로그인하는 경우, 입력된 비밀번호와 데이터베이스에 저장된 암호화된 비밀번호를 비교하여 인증을 수행해야합니다. 다음은 Flask 애플리케이션에서 사용자 인증을 처리하는 코드 예시입니다.

@app.route('/login', methods=['POST'])
def login():
    username = request.form['username']
    password = request.form['password']

    try:
        user = User.get(User.username == username)
    except User.DoesNotExist:
        return 'Invalid username'

    if user.verify_password(password):
        return 'Login successful'
    else:
        return 'Invalid password'

위의 예제에서 사용자를 검색한 후 verify_password 메서드를 사용하여 입력된 비밀번호를 확인합니다. 비밀번호가 일치하는 경우 로그인이 성공적으로 완료되고, 그렇지 않은 경우 비밀번호가 잘못되었음을 나타내는 메시지가 반환됩니다.


위의 예시를 참고하여 Peewee를 사용해서 데이터베이스에서 암호화 처리하는 방법에 대해 알아보았습니다. 암호화는 사용자의 데이터 보호를 위해 중요한 부분이므로 신중하게 처리해야합니다. 더 자세한 내용은 Peewee 공식 문서를 참조하시기 바랍니다.