암호화 실습을 위해서는 bcrypt와 jwt를 설치가 선행되어야 진행할 수 있습니다.
pip install bcrypt pip install jwt
Python 3.8.5 (default, Aug 5 2020, 08:36:46) [GCC 7.3.0] :: Anaconda, Inc. on linux Type "help", "copyright", "credits" or "license" for more information. >> import bcrypt >> import jwt >> >> >> password = 'hihi1231' >> >> type(passwrod) Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'passwrod' is not defined >> type(password) <class 'str'> >> >> password.encode('utf-8') b'hihi1231' >> >> # encoding ->데이터의 형(타입)을 변경하는 과정 >> password.encode('utf-8') b'hihi1231' >> >> encoded_password = password.encode('utf-8') >> encoded_password b'hihi1231' >> >> type(encoded_password) <class 'bytes'> >> >> #다시 str 형태로 바꾸고 싶을떄는 decoding >> encoded_password.decode('utf-8') 'hihi1231' >> #str 타입으로 변경된 것을 볼 수 있습니다. >> >> #암호화 하는방법 --------------- >> >> hashed_password = bcrypt.hashpw(encoded_password, bcrypt.gensalt()) >> hashed_password b'$2b$12$GbE8cVQxBGrv6Y/AuWpN5.Bz49Xlki7Z8LgtThepWgXuzPI4aJlCi' >> bcrypt.gensalt() b'$2b$12$d1D0v59O2egYy.MnpycveO' >> bcrypt.gensalt() b'$2b$12$RMyBhbWNlTJ3sgz1tRXc1O' >> bcrypt.gensalt() b'$2b$12$Yv/GF66IbQFsyBoeJ3hzLu' >> hashed_password b'$2b$12$GbE8cVQxBGrv6Y/AuWpN5.Bz49Xlki7Z8LgtThepWgXuzPI4aJlCi' >> type(hashed_password) <class 'bytes'> >> #사용자가 입력한 비밀번호가 암호화 된 상태 >> #b'를 보고ㅗ 바이트 타입임을 알수 있다. 바이트 된 타입상태를 저장할수 없기 때문에 다시 >> #바꿔야한다. >> >> hashed_password.decode('utf-8') '$2b$12$GbE8cVQxBGrv6Y/AuWpN5.Bz49Xlki7Z8LgtThepWgXuzPI4aJlCi' >> #실제 DB에 저장하는 형태 -------------------------------- >> >> #bcrypt.hashpw는 패스워드를 만드는 것 / bcrypt.checkpw는 사용자가 입력한 >> #데이터와 기존에 DB에 저장된 값을 비교하는 것 >> >> #checkpw에 들어오는 데이터 타입은 바이트 타입으로 들어와야함 >> #로그인 성공뒤에는 jsonwebtoken 발행 >> >> user_id = 2000 >> {'user_id' : user_id} {'user_id': 2000} >> data = {'user_id' : user_id} >> jwt.encode(data,'secret_key', algorithn = 'HS256') b'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoyMDAwfQ.koE-VhzThtO74-0JqCk6ocRzd9NaVS9lEaQP1aTXxmE' >token = jwt.encode(data,'secret_key'malgorithm ='HS256' >token b'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoyMDAwfQ.koE-VhzThtO74-0JqCk6ocRzd9NaVS9lEaQP1aTXxmE' >token.decode('utf-8') # 바이트에서 텍스트 형태로 변환해서 저장 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoyMDAwfQ.koE-VhzThtO74-0JqCk6ocRzd9NaVS9lEaQP1aTXxmE'