[ ERROR ] bcrypt : checkpw() / ValueError : Invalid salt

Hailee·2020년 12월 10일
4

[ TIL ]

목록 보기
28/40
post-thumbnail

어느 평화로운 저녁... 하람이는 열심히 bcrypt를 사용해서 로그인 처리를 하고있었는데..
아무리해도 checkpw()메서드를 사용하지 못하는 것이 아닌가..!

멘토님께 질문드린 결과, 보시자마자 바로 "bcryptcheckpw()메서드를 검색해보세요!" 라고 하셨다 허허

그 말인즉슨 내가 작성한 코드에 문제가 있는 것을 바로 아셨다는 것..!

try, except문으로 감싸뒀더니 checkpw()메서드에서 에러가 나니까 무조건 except 빠져서,
뭐가 문제인지 에러 메세지도 보이지 않았다.
우선 try문 밖으로 밖으로 빼서 뭐가 문제인지, 에러메세지를 보기로 했다.


도대체 실습했던 것이랑 뭐가 다른건지 이해가 안갔다..
checkpw()메서드는 입력받은 값들이 모두 Type = bytes여야 한다는 것!
그래서 DB에서 가져온 비밀번호도 str 👉🏻 bytes로 바꿨었는데!!!
분명 지금은 모두 bytes들을 매개변수로 받고있는데!!


👆🏻 드디어 확인한 에러메세지. ValueError : Invalid salt
잉? salt는 아까 회원가입해서 DB에 넣을 때 쓴거 아니야? 갑자기 왜?

👉🏻 Invalid Salt with Python 3, Django and Bcrypt

해결하는데 도움을 준 stackoverflow!!!!!

이 사람도 나랑 똑같다.

There are no errors when the information gets inserted. The code for the password check is then as follows

저도 그래요!!!

이 사람의 글에 달린 답변에서는, request.POST로 받아오는 비밀번호 값을 encode('utf8')해주라고 하는 것이 아닌가
제가 그거 했는데 안되던데요

역시나 이사람도 인코딩을 해줬지만 변함이 없다고 했다.
그러더니 decode('utf8)을 해주니 해결되었다고 하는 것이 아닌가!

Yeah!! Finally got it fixed. The problem was when it is loaded into the database.
After the hash has been completed the hashed password needs to be decoded prior to loading into the database.
So the new password load needs to be: Password.objects.create(pwd = password.decode('utf-8'),
user = User.objects.get(id = new_user.id)).
Still not sure why exactly but it works.

결론은 자기도 잘 모르겠다지만, DB에 들어갈 때 decode를 꼭 해주어야 한다는 것!
그래서 혹시나 하고 decode를 해주니 드디어!! 성공적으로 작동했다. ㅎㅅㅎ


보다 정확하게 알고싶으니까.. 구글링하다가 위코드 선배 기수의 글을 봤다.

password를 DB에 처음 입력할 때 decode() 해야 하는 이유는?

bcrypt.hashpw('1234'.encode('utf-8'),bcrypt.gensalt()) 는 b'$2b$12$8EPF0NBZotiz0aPDVKwQHumq6dMhMnfP1BwC3xh2lKigedKeH4ucq'
인데,
bcrypt.hashpw('1234'.encode('utf-8'),bcrypt.gensalt()).decode()는
'$2b$12$8EPF0NBZotiz0aPDVKwQHumq6dMhMnfP1BwC3xh2lKigedKeH4ucq'
로 앞의 바이트라는 표시를 빼주기 때문이다

👆🏻 decode( )를 하지 않고 DB에 입력되었던 경우, 로그인 단계에서 password를 호출했을 때 type=str이어서 다시 byte로 바꾸어주어야했다.
아마 그래서 저런 말을 하지 않았나 싶다!

profile
웹 개발 🐷😎👊🏻🔥

0개의 댓글