bcrypt

2510 단어 djangopythondjango

회원가입/로그인 기능을 구현해보면서 bcrypt를 사용하게 되었다.
간단하게 사용한 방법은 아래와 같다.

pip install bcrypt
#터미널에서 bcrypt를 설치

import bcrypt
#사용하고 싶은 파일에서 import

암호화된비밀번호 = bcrypt.hashpw(입력받은비밀번호.encode('utf-8'),bcrypt.gensalt())
#입력받은비밀번호를 byte형으로 변환
#bcrypt.hashpw함수 안에 첫번째 인자로 입력
#두번째 인자는 bcrypt.gensalt()로 랜덤한 값을 생성하는 함수사용
#두 인자를 넣으면 gensalt로 인해 더 복잡한 값으로 암호화된 byte형 값이 나옴
#회원가입시에 만든 비밀번호는 byte형 그대로 db에 저장하면 안되고 반드시 다시 decode해서 넣어야 함

bcrypt.checkpw(입력받은비밀번호.encode('utf-8'), 암호화된비밀번호.encode('utf-8'))
#db에 저장된 암호화된비밀번호와 로그인 요청으로 받은 비밀번호를 비교
#bcrypt.checkpw()의 반환값은 boolean임
#즉 반환값이 1이면 비밀번호가 일치한 것

위와 같이 bcrypt를 사용해서 비밀번호를 암호화 하는데 내가 가진 의문은 어떻게 bcrypt.gensalt()로 랜덤한 값을 생성해서 더 복잡해진 비밀번호를 bcrypt.checkpw()로만 확인이 가능한가? 였다. 나름대로 알아보고 찾아보고 내린 결론은 bcrypt는 암호화 방식중 단방향 암호화방식이기 때문에 다시 복호화 해서 비교하는 양방향 암호화 방식과는 다르고, bcrypt.gensalt(), bcrypt.hashpw() 메소드 둘 다 bcrypt가 포함하고 있는 메소드이기 때문에 규칙성을 가지고 만들어져서 비밀번호를 암호화 할때 사용한bcrypt.gensalt() 값을 몰라도 확인 할 수 있다는 것이다. 내 생각에는 이런 방식일때 보안에 대해서 의구심이 들긴 하지만, 지금 이 부분만 너무 고민하기 보다는 과유불급이라는 말도 있기에 이 정도만 알아두고 넘어가서 더 많은 것을 알게 된다면 이 부분도 자연스레 해결될거라 생각한다.

좋은 웹페이지 즐겨찾기