Bcrypt
- 현재 진행 중인 파이썬 장고 기반의 백엔드 서버 개발에서 사용하기로 결정한 함수
- pip를 사용해서 설치를 진행했다. -> Conda 환경에서 뭔가 에러가 나는데 뭐가 문제인지는 추후 알아볼 것
- ex) pip3 install bcrypt
# bcrypt_test.py
import bcrypt #모듈 임포트
password = 'password1234'
hash_pw = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt()) # 해시 진행
input_pw = 'password1234'
wrong_pw = 'password123'
if bcrypt.checkpw(input_pw.encode('utf-8'), hash_pw): # checkpw는 bcrypt에서 지원하는 비교용 메소드 일치하면 True, 불일치하면 False 반환
print('CHECK')
else:
print('FAIL')
if bcrypt.checkpw(wrong_pw.encode('utf-8'), hash_pw):
print('CHECK')
else:
print('FAIL')
JWT
- 로그인 성공 시 클라이언트로 전달할 Access Token 발행을 위한 방법
- pip를 사용해서 설치를 진행함
- ex) pip3 install pyjwt
# jwt_test.py
import jwt # jwt 모듈 임포트
token = jwt.encode({'user_id' : 1}, 'Salt', algorithm = 'HS256') # 토큰 발행을 위해서 필요한 인자들 1.암호화할 평문, 2.함께 포함시켜 해시를 진행할 임의의 데이터, 3.사용할 알고리즘
print(token)
decrypt = jwt.decode(token, 'Salt', algorithm = 'HS256') # 올바른 복호화 과정을 위해서는 주어진 토큰을 생성한 것과 같은 Salt(해싱시 포함된 임의의 데이터)와 알고리즘을 사용해서 복호화해야 성공 가능
print(decrypt)
fail = jwt.decode(token, 'Wrong', algorithm = 'HS256') # 실패할 때에는 어떻게 동작하는지 확인 위한 테스트
print(fail)
- 실행 결과 분석
- 첫번째 출력문은 발행된 토큰을 의미한다.
- bytes 타입이며 장고에서 JsonResponse를 사용해서 클라이언트로 전달하려면 utf-8 포맷으로 디코딩을 진행해야 한다.
- 두번째 출력문은 발행된 토큰을 동일한 Salt값과 알고리즘을 사용하여 복호화했을 때의 결과를 출력한 것
- 세번째부터는 일부러 토큰 생성에 사용된 Salt값이 아닌 데이터를 사용해 복호화를 시도한 것
- InvalidSignatureError Exception이 발생한다.
- try - exception 문으로 핸들링 가능할 것 같다.
- HS256이 아닌 RS256을 사용해서 복호화를 진행해봤는데 이럴 때에는 복호화가 제대로 진행됐다.
- 왜 되는지 모르겠다. 알고리즘이 다르면 실패해야 하는 게 정상 동작이라고 생각하는데 좀 더 알아봐야 함
- InvalidSignatureError Exception이 발생한다.
- 첫번째 출력문은 발행된 토큰을 의미한다.
'wecode > TIL 정리' 카테고리의 다른 글
자료구조 TIL - 3. Stack, Queue (0) | 2020.08.22 |
---|---|
자료구조 TIL - 2. Set, Dictionary, Hash (0) | 2020.08.12 |
위코드 Foundation - 인증과 인가 (0) | 2020.08.11 |
위코드 Pre Course - Django 개념과 흐름 (0) | 2020.08.08 |
위코드 Foundation - HTTP RESTful API의 기본 (0) | 2020.08.08 |