Bcrypt로 비밀번호 암호화 하기

Bcrypt 설치하기

암호화를 위해 bcrypt 라이브러리 설치

$pip install bcrypt

파이썬 인터프리터에서 임포트하여 사용

import bcrypt

Bcrypt를 이용하여 암호화하기

bcrypt는 str 이 아닌 Bytes 데이터를 암호화 하기 때문에 필요에 따라 인코딩 또는 디코딩 해야함

str -> bytes : 인코딩
bytes -> str : 디코딩

패스워드 암호화하기

password = '1234'
hashed_password = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt())
print(hashed_password)
b'$2b$12$YFs9rh.1LgJwZuf9ibyjpuLvBoCaGX0MzedFWF2Jo0zU3lMZurZ4a'

암호화된 비밀번호 확인하기

  • 복호화할 수 없는 방식의 암호화이기 때문에 입력받은 비밀번호를 암호화하여 암호화된 결과를 비교
  • bcrypt.checkpw(사용자가 입력한 pw, 저장된 암호화된 pw) 메소드가 해준다. (모두 bytes type)으로 입력하기

JWT 구현하기

  • PyJWT 설치

    pip install pyjwt

  • 라이브러리 동작하기
    import jwt #패키지명은 pyjwt이지만 임포트할때의 이름은 jwt입니다.
SECRET = 'secret' #'랜덤한 조합의 비밀번호' 예제이므로 단순하게 'secret'이라고 하겠습니다.
access_token = jwt.encode({'id' : 1}, SECRET, algorithm = 'HS256')
print(access_token)
'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MX0.-xXA0iKB4mVNvWLYFtt2xNiYkFpObF54J9lj2RwduAI'
  • jwt 의 결과물은 bytes타입(ver 1.7) 또는 str타입(ver 2.0)

  • bytes로 나온 결과물은 str로 바꿔주면 jwt Token, (access_token)이다. 이렇게 발행한 토큰을 전달하면 된다.

  • 요청에서 들어온 토큰이 우리가 발행한 토큰과 일치하는지 확인하기 위해서 확인하기

header = jwt.decode(access_token, SECRET, algorithm = 'HS256')
print (header)
{'id' : 1}
  • 인증하는 코드는 어디에 구현해야 할까?
    - 엔드 포인트에 데코레이터를 구현
    • 데코레이터 구현은 보통 user app 에 utils.py만들어서 작성

좋은 웹페이지 즐겨찾기