728x90
- bcrypt는 단방향 암호화해주는 파이썬 라이브러리
- 단방향이라면 평문→암호화는 가능하지만 암호화→평문으로 복호화는 어렵다
- 비밀번호를 관리할 때 유용하게 쓰인다
- db에 암호화되어 저장된 비밀번호를 복호화하는 것도 불가능하기 때문에 내부자가 회원의 비밀번호를 알아내는 것도 불가능하며, 회원이 입력한 비밀번호화 일치하는지만 확인한다
- hahsing : 원본의 의미를 알 수 없게 섞어놓은 것
- salting : 실제 비밀번호에 랜덤 값을 더해서 해시값을 계산하는 방법
- key stretching : 해쉬 값을 여러번 반복하는 행위
pip install bcrypt
pip install pyjwt
→ pyjwt는 jwt(json web token)을 암호화, 복호화해주는 라이브러리이다
>>> import bcrypt #1
>>> password = 'pass1234' #2
>>> bcrypt.hashpw(password, bcrypt.gensalt()) #3
라이브러리를 임포트 해 주고 나서 임이의 패스워드를 암호화한다.
이렇게 하면 #3번 라인에서 에러가 발생한다.
암호화 함수는 오직 bytes string에서만 작동하기 때문에, 해싱하기 전에 password를 bytes string으로 변환해줘야 한다. utf8 인코딩을 해 주자.
password.encode('uft-8')
#혹은
b = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt())
암호화된 byte 형식의 패스워드가 입력되는 것을 볼 수 있다
여기서 b
는 바이트 형식이기에 디코딩을 해서 데이터베이스에 저장해야 한다.
암호화된 비밀번호 일치 확인
c = '123456'
bcrypt.checkpw(c.encode('utf-8'), b) #False
c = 'pass1234'
bcrypt.checkpw(c.encode('utf-8'), b) #True
토큰 발행
- 사용자가 id, pw를 입력해 로그인 버튼을 누르면 서버는 id와 pw를 db에 저장한 것과 비교하고, 인증이 완료되면 회원에게 토큰 발행.
- 그 토큰은 브러우저의 쿠키나 세션 스토리지에 저장되어 서버에 데이터를 요청할 때마다 토큰 담아 정보 요청
>>> import jwt #설치는 pyjwt로 했지만, 쓸 때는 jwt로 한다
>>> jwt.encode({'user_id' : 1}, 'blah', algorithm='HS256') #2
>>> jwt.decode({'user_id' : 1}, 'blah', algorithm='HS256') #3
> {'user_id' : 1} #4
- 토큰 대상, 시크릿키, 해싱 알고리즘을 차례로 넣는다.
- 다만 토큰이 탈취당할 경우 보안에 타격을 입어 refresh token도 존재한다.
728x90
'study > Python 🌼' 카테고리의 다른 글
[Python] 월 단위의 날짜 차이 계산 (0) | 2021.07.05 |
---|---|
[Python] Mac SSLCertVerificationError (0) | 2021.06.30 |
[Python] dataclass 모듈 사용법 (1) | 2021.05.28 |
[Python] SQLAlcehmy (0) | 2021.05.28 |
[Python] classmethod vs staticmethod (0) | 2021.05.28 |