[Westagram_4]bcrypt,jwt

HYEYOON·2021년 2월 9일
1
post-thumbnail

[westagram_2]여기에서 비밀번호를 생성할 때, 입력한 password가 db에 그대로 들어가게 만들었다.
이제 Password를 암호화해보자~~😊
bcrypt와 jwt는 인증인가에서 정리를 해놨기 때문에 여기에서는 간단하게만 설명하고 적용시키는 것을 위주로 설명하겠다!


1. bcrypt

bcrypt는 비밀번호 암호화에 사용되는 알고리즘을 제공하는 라이브러리다.

프론트로부터 비밀번호를 받았으니 bcrypt의 hashpw()메소드로 암호화를 시켜주려고 한다.
bcrypt 암호화 방법
1. pip install bcrypt를 해준다.
2. views.py에 bcrypt를 import해준다.
import bcrypt
3. bcrypt는 str데이터가 아닌 bytes 데이터를 암호화 한다. 따라서 암호화시 bytes화 해야한다. str을 encode하면 bytes되고, bytes를 decode하면 str화된다.
encode,decode시에는 'UTF-8' 유니코드 문자규격을 사용해야한다.
원래 create 할 때,
password = password로 암호화하지 않았지만
hashed_password = bcrypt.hashpw(password.encode('utf-8'),bcrypt.gensalt())로 암호화시켰다.

'gensalt()'는 bcrypt암호화의 단점을 보완하기위해 다이제스트를 생성할 때 추가되는 바이트 단위의 임의의 문자열을 추가한다.

이렇게 암호화 완성~~~
password를 12345678를 넣어도 아무도 알아볼 수 없게 나온다! success!

이제 토큰고고링~

2. jwt

jwt..jmt...히히히히히히히

  • 가장 먼저 import jwt를 해준다.
  • bcrypt에서는 비밀번호 정보를 비교할수 있는 checkpw()메서드를 제공한다.
  • 입력받은 password와 DB의 password와 일치하는지 확인해야한다.
  • 이때, str타입으로 저장했기 때문에 bytes 타입으로 바꿔주고 비교한다.
  • 비교해서 True이면 SUCCESS메시지와 함께 token을 보내고 그렇지 않으면 오류 메세지를 보내면 된다!


정리하자면

  • bcrypt.gensalt()로 소금 생성
  • 비밀번호를 암호화 : bcrypt.hashpw(바이트형 비밀번호, 소금생성기의 랜덤값)
  • 비밀번호 확인 : bcrypt.checkpw(바이트형 입력받은 비밀번호, 바이트형 DB에 저장된 해쉬 값)
  • 바이트 값으로 변환 해쉬용 값을 바꿀때 : encode :hashed_password.encode('utf-8')
  • 문자열로 변환해서 DB에 저장할 때 : decode :hashed_password.decode('utf-8')
profile
Back-End Developer🌱

0개의 댓글