Wednesday_August_5
.
.
.
위코드에서 2차 프로젝트를 진행중에 있는데, 급하게 블로그를 써본다.
진짜 리얼 꿀팁이기 때문에 꼭 알려주고싶다.
일단 미리 말씀 드리자면
bcrypt.hashpw의 리턴값은 bytes이다. 하지만 str으로 나오는 분들을 위한 글이다.
bcrypt를 install 하고 import 하게 되면,
hashpw라는 함수를 쓸 수 있다.
첫 번째 인자에는 bytes형태의 비밀번호,
두 번째 인자에는 bcrypt.gensalt() 라는 함수를 써주면 된다.
일단 파이썬에서는 기본적으로 str을 encode해주면 bytes로 바꿔주기 때문에, 패스워드.encode('utf-8' << 원하는 형식으로) 을 해주게되면 bytes로 변한다.
그리고 두 번째 인자에 저 gensalt()라는 함수는 bcrypt에서 지원을 해주고 이 함수는 bytes형태의 솔트값을 던져준다.
일단 여기까지 정리하자면, hashpw의 두 인자 모두 bytes로 오면 된다. 그리고 리턴값은 bytes형이다. 이게 국룰이다.
예를들어
mypwd = 'asdf1234' hashed_password = bcrypt.hashpw(mypwd.encode('utf-8'), bcrypt.gensalt())
이렇게 하고 'hashed_password'의 타입과 출력은 다음과 같다.
<class 'bytes'> b'$2b$12$dExYfc0KOPg.nZchoF7DOenTb811LZrdLvmJWtU1IPzZ8PmCqV8bi'
컴퓨터가 거짓말을 하나?
자꾸 리턴타입이
<class 'str'> 이렇게 나오는 것이다.
진짜 난 잘못한게 없는데... 컴퓨터도 거짓말은 안하는데...
자, 우선 vi창을 열고 다음 명령어를 쳐줍니다.
pip freeze | grep bcrypt
이 명령어는 bcrypt라는 단어가 들어간 설치된 모든 패키지를 보여준다.
자 이제 검거에 나서겠다.
사진이 작긴하지만ㅠ
아무튼, bcrypt말고 py-bcrypt라는 놈을 검거하였다!!
pip uninstall py-bcrypt
pip uninstall bcrypt
pip install bcrypt
일단 이렇게만 하면 이제 리턴값으로 bytes가 잘 나온다.
그리고 착했던 친구를 삭제했다가 다시 설치해주는 이유는 다음과 같다.
AttributeError: module 'bcrypt' has no attribute 'hashpw'
이러한 에러가 뜬다.
아무튼! 그래서 재설치를 해 준것이다.