[TIL] 암호화 실습

김성진·2020년 9월 8일
0
post-thumbnail

먼저 가상환경을 만든다.

인증

다운로드 후 임포트;

pip install bcrypt
pip install pyjwt

import bcrypt
import jwt

password = 'hihi1231'
type(password) #생성한 password는 str 타입력하세요

**password.encode('utf-8') #이렇게 하게되면 byte 타입으로 바뀐다
#**여기서 해쉬함수로 감싸서 암호화 시킬 때, 해쉬함수는 바이트 형태의 인자만 받기 때문이다**

encoded_password = password.encode('utf-8') #변수지정
type(encoded_password) #byte 타입으로 바뀐거 확인

**encoded_password.decode('utf-8') #다시 str 타입으로 돌아가는 것
**#byte형태로 감싸면 ex)"b'$2$4daewdsfs'"와 같이 바뀌는데 앞에 b도 하나의 str으로 인식하게 되면 데이터베이스에 저장될때나 프론트에 넘길때 문제가 생길 수 있기에 다시 디코딩해서 str형태로 바꿔야 한다.**

type(decoded_password) #str 타입으로 다시 바뀐거 확인

hashed_password = bcrypt.hashpw(encoded_password, bcrypt.gensalt()) #생성된 비번이 암호화되서 byte 타입으로 됨.
hashed_password
결과값: b'2b$12.0oiSJ8gyDNRrDHEEBjrbehSjIUU06a5PaEFURrWptHu.qBmYE0gK'

hashed_password.decode('utf-8') #암호화 된 것을 다시 str으로 변환


인가

*사용자가 입력한 비밀번호와 비교할 때는;

print(bcrpyt.checkpw('1234'.encode('utf-8')),
	#사용자가 입력한 비밀번호를 인코딩해서 바이트 타입 상태로
db_password.encode('utf-8')
	#디비에 저장된 해쉬된 비밀번호 다시 인코딩해서 바이트 타입 상태로 비교
user_id = 2000
{'user_id' : user_id}

data = {'user_id' : user_id}
jwt.encode(data, 'sungjin_key', algorithm = 'HS256')
my_token = jwt.encode(data, 'sungjin_key', algorithm = 'HS256')
my_token
결과값: b'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoyMDAwfQ.OjqeFnhyIb4g02mOIq4y0mgs2VzC1_2ZSkEM566YZ6Q'

my_token.decode('utf-8') #다시 토큰을 str타입으로 바꿈입력하세요
profile
multi-national communicator with programming (back-end)

0개의 댓글