암호화 실습

DONGHYUN KOO·2020년 9월 12일
0

암호화 실습을 위해서는 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'

0개의 댓글