암호화

yoon__0_0·2024년 8월 18일
0

프로젝트

목록 보기
2/7

jwt 암호화

jwt(Json Web Token)를 사용하여 액세스 토큰 생성

이를 위해서는 3가지의 정보가 필요함

  • ACCESS_TOKEN_EXPIRE_MINUTES - 토큰의 유효기간을 의미한다. 분 단위로 설정한다.
  • SECRET_KEY - 암호화시 사용하는 64자리의 랜덤한 문자열이다.
  • ALGORITHM - 토큰 생성시 사용하는 알고리즘을 의미하며 여기서는 HS256을 사용한다.

SECRET_KEY 생성방법

1) openssl 설치가 되었을 시

openssl rand -hex 32

2) python 에서 사용

import secrets
secrets.token_hex(32)

Token 생성

from jose import jwt

ALGORITHM = "HS256"

data = {
        "sub": user.profile_id, # 사용자 식별 
        "exp": datetime.utcnow() + timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES) # token 유효기간
    }
access_token = jwt.encode(data, SECRET_KEY, algorithm=ALGORITHM)

CrytContext 암호화

  • 다른 알고리즘을 활용하여 비밀번호를 hash 해주는 모듈
# 설치 명령어
pip install "passlib[bcrypt]"
from passlib.context import CryptContext

pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")

CryptContext 파라미터

  • schemes
    • 여기 있는 hash 알고리즘 중 하나 사용 hash 알고리즘 리스트
    • ISO-27001 보안 규정을 준수해야하는 상황이면 PBKDF2
    • 보안 시스템을 구현하는데 많은 비용을 투자할 수 있다면, Scrpyt
  • deprecated
    • 특정 해시 알고리즘을 더 이상 사용하지 않도록 지정
    • "auto"로 설정하면, CryptContext가 설정된 기본 알고리즘 외에 다른 알고리즘을 사용할 때 자동으로 deprecated 상태로 처리
    • 기본적으로 가장 강력한 해시 알고리즘을 사용하도록 하고, 나중에 알고리즘을 업데이트할 때 유용하게 사용됨

다양한 사용 함수

  • .hash("password")
    • 선택한 알고리즘으로 비밀번호 hash
  • .identify("password-hashed")
    • 여러 알고리즘들 중 하나에 속해져 있는지 확인하는 함수
    • 특정 알고리즘을 return 해줌
  • verify("password", "password-hashed")
    • 들어온 password 값과 원래 hash되어있는 password 와 동일한지 확인하는 함수
profile
신윤재입니다

0개의 댓글