encoding & decoding, bcrypt - 비밀번호 암호화!

지원석·2021년 12월 22일
0

Project "westagram"

목록 보기
2/3
post-thumbnail

비밀번호의 암호화!

지금까지의 작업에서 유저들의 비밀번호를 string으로 받아 곧바로 DB에 저장해왔다. 이런식으로...!

이렇게되면, DB에는 비밀번호가 직접적으로 저장이되고, DB관리자나 DB에 접근할 수 있는 사람들은 유저들의 정보에 접근할 수 있는 위험이 있는 것이다.

이러한 이유로!
비밀번호를 꼭 암호화시켜서 다루는데, 비밀번호를 암호화하는 과정에서 "bcrypt"를 사용해 볼 수 있다!

비밀번호 hashing process

bcrypt 사용방법

Install 우선 설치!

pip install bcrypt

hashpw()

  • hashpw(password: bytes, salt: bytes) -> bytes
  • bcrypt.gensalt() 는 호출할 때 마다 랜덤한 salt값 반환
  • Database에 저장할 때는 hashed_pw를 string으로 저장하기 때문에 Decoding에서 저장한다.
import bcrypt

password   = '1234'
encoded_pw = password.encode('utf-8') # encoding한 문자열

# password hashing
salt      = bcrypt.gensalt()
hashed_pw = bcrypt.hashpaw(password.encode('utf-8'), salt)

그런데, 실제로 이렇게 아래와 같이 해버리면,

에러가 나버림......
에러가 나는 이유는?

  • unicode-object가 hash 전에 encoded 되어야한다는 에러이다.
  • unicode-object는 string을 16 혹은 32 바이트 데이터로 간주한다.

그렇기때문에 저 위에서처럼 .encode('utf-8') 를 붙여주어야 하는 것!!

타입을 확인해보면,

>>> type(hashed_pw1)
<class 'bytes'>

여기서 중요한 점은!!!
이렇게 받은 hash가 된 비밀번호는 byte이다. 데이터베이스에 저장할때는 이를 decode 해주어 string으로 저장해야한다.

>>> hashed_decoded_pw1 = hashed_pw1.decode('utf-8')
>>> type(hashed_decoded_pw1)
<class 'str'>

*westagram 클론 코딩 과제를 계속해서 열심히 해보자^^!

0개의 댓글