[Django/Python] Bcrypt & JWT


Bcrypt
個人情報を暗号化するためのライブラリ.
bcryptは「str」データではなく「Bytes」データを暗号化する.
したがって、データを「Bytes」に変換する必要があります.
Pythonでは、strを「Bytes」と符号化します.
「Bytes」は復号化されて「str」となる.
encodeとdecodeでは「UTF-8」Unicode文字仕様を使用して、私たちが認識できる形式に変換します.
#Bcrypt 설치
pip install bcrypt

#import
import bcrypt

password = '1234'         #'str'타입

#password를 인코드 해준다.
#보안을 위해 gensalt()함수 사용 
hashed_password = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt())    

#'Bytes'타입으로 출력된다.
print(hashed_password)
-> b'$2b$12$YFs9rh.1LgJwZuf9ibyjpuLvBoCaGX0MzedFWF2Jo0zU3lMZurZ4a'

type(hashed_password)
-> <class 'bytes'>
パスワードが暗号化パスワードと一致することを確認すると、
bcrypt.checkpw(パスワード(バイトタイプ)、暗号化パスワード(バイトタイプ)を使用します.
True、Falseの値を返します.
new_password = '1234'

#new_password 인코드
bcrypt.checkpw(new_password.encode('utf-8', hashed_password)
-> True
JWT
JSON Web Token. 認証の手段.
#설치
pip install pyjwt

#import
import jwt

access_token = jwt.encode({'user_id': 3}, 'secret', algorithm='HS256')

print(access_token)
-> 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MX0.-xXA0iKB4mVNvWLYFtt2xNiYkFpObF54J9lj2RwduAI'
「secret」セクションとアルゴリズムは露出できません.
my_settings.pyなどのファイルに値を格納して使用する必要があります.
{「user id」:=3}ここでも個人情報以外のデータを使用する必要があります.
認証用のトークンが発行されている場合は、フロントエンドエンジニアに転送されます.
(ログイン成功など)
認証されたユーザーのみがアクセスできます.トークンを取得し、発行されたトークンと一致していることを確認する必要があります.
header = jwt.decode(access_token, 'secret', algorithms='HS256')
print(header)
-> {'user_id' : 3}