encoding & decoding, bcrypt - 비밀번호 암호화!
비밀번호의 암호화!
지금까지의 작업에서 유저들의 비밀번호를 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 클론 코딩 과제를 계속해서 열심히 해보자^^!
Author And Source
이 문제에 관하여(encoding & decoding, bcrypt - 비밀번호 암호화!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jiws0605/encoding-decoding-bcrypt-비밀번호-암호화저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)