[westagram_2]여기에서 비밀번호를 생성할 때, 입력한 password가 db에 그대로 들어가게 만들었다.
이제 Password를 암호화해보자~~😊
bcrypt와 jwt는 인증인가에서 정리를 해놨기 때문에 여기에서는 간단하게만 설명하고 적용시키는 것을 위주로 설명하겠다!
bcrypt는 비밀번호 암호화에 사용되는 알고리즘을 제공하는 라이브러리다.
프론트로부터 비밀번호를 받았으니 bcrypt의 hashpw()메소드로 암호화를 시켜주려고 한다.
bcrypt 암호화 방법
1. pip install bcrypt
를 해준다.
2. views.py에 bcrypt를 import해준다.
import bcrypt
3. bcrypt는 str데이터가 아닌 bytes 데이터를 암호화 한다. 따라서 암호화시 bytes화 해야한다. str을 encode하면 bytes되고, bytes를 decode하면 str화된다.
encode,decode시에는 'UTF-8' 유니코드 문자규격을 사용해야한다.
원래 create 할 때,
password = password
로 암호화하지 않았지만
hashed_password = bcrypt.hashpw(password.encode('utf-8'),bcrypt.gensalt())
로 암호화시켰다.
'gensalt()'는 bcrypt암호화의 단점을 보완하기위해 다이제스트를 생성할 때 추가되는 바이트 단위의 임의의 문자열을 추가한다.
이렇게 암호화 완성~~~
password를 12345678를 넣어도 아무도 알아볼 수 없게 나온다! success!
이제 토큰고고링~
jwt..jmt...히히히히히히히
import jwt
를 해준다.정리하자면
- bcrypt.gensalt()로 소금 생성
- 비밀번호를 암호화 : bcrypt.hashpw(바이트형 비밀번호, 소금생성기의 랜덤값)
- 비밀번호 확인 : bcrypt.checkpw(바이트형 입력받은 비밀번호, 바이트형 DB에 저장된 해쉬 값)
- 바이트 값으로 변환 해쉬용 값을 바꿀때 : encode :hashed_password.encode('utf-8')
- 문자열로 변환해서 DB에 저장할 때 : decode :hashed_password.decode('utf-8')