pip install bcrypt
실행하고 라이브러리 import
import bcrypt
⭐️bcrypt의 암호화 방법!
bcrypt는str
데이터가 아닌Bytes
데이터를 암호화한다.
따라서 암호화시에 bytes화 해야한다.
파이썬에서는str
을 encode하면 bytes(이진화) 되고,Bytes
를 decode하면str
화 한다.
encode, decode시에는 우리가 인식할 수 있는 형태로 변환하기 위해 'UTF-8' 유니코드 문자 규격을 사용한다.
password = '1234'
hashed_password = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt())
print(hashed_password)
#b'$2b$12$YFs9rh.1LgJwZuf9ibyjpuLvBoCaGX0MzedFWF2Jo0zU3lMZurZ4a'
#암호화 된 비밀번호를 얻었다. data type은 bites
type(hashed_password)
# <class 'bytes'>
이렇게 암호화된 방식은 일방향 암호화로 복호화 할 수 없도록 암호화하는 방식이다.
양방향으로 확인이 불가능하지만 bcrypt의 bcrypt.checkpw() 메소드로 비밀번호 확인이 가능하다.
new_password = '1234'
bcrypt.checkpw(new_password.encode('utf-8'),hashed_password)
#True
단 이 메소드에는 규칙이 있다.
bcrypt.checkpw() 메소드의 괄호에 들어가는 (입력받은 패스워드, 저장된 암호화된 패스워드)의
데이터 타입이 모두 Bytes
여야 한다.
pip install pyjwt
import jwt
SECRET = 'secret' #'랜덤한 조합의 키' 예제이므로 단순하게 'secret'이라고 하겠습니다.
access_token = jwt.encode({'id' : 1}, SECRET, algorithm = 'HS256')
print(access_token)
#b'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MX0.-xXA0iKB4mVNvWLYFtt2xNiYkFpObF54J9lj2RwduAI'
이제 인증을 위한 매개체를 만든건데 이게 바로 jwt token 일명 access_token이다.
이렇게 발급된 토큰은 다시 decode해서 json형태로 프론트엔드에 보내준다.
그 후에 프론트엔드에 저장 되어있던 토큰을 백엔드에 보내주면 인증을 통과한 사용자만 접근할 수 있도록
우리가 발행한 토큰인지 확인해야한다.
이 경우는 양방향 암호화로 복호화가 가능하다.
header = jwt.decode(access_token, SECRET, algorithm = 'HS256')
print(header)
#{'id': 1}
decode의 결과는 우리가 encode 할 때 넘겼던 header 값인 {'id':1}입니다.