[Auth] 사용자의 패스워드 암호화하기

min00young·2020년 11월 10일
0

사용자의 패스워드 암호화의 필요성

패스워드는 개인정보중에서 가장 중요한 부분입니다. DB에 저장될때도 DB를 관리하는사람도 확인하지 못하도록 암호화되어서 저장이 됩니다. 이번글에서는 텍스트값을 암호화된 문자로 바꾸는 방법에 대해서 기록합니다.

Bcrypt 라이브러리

bcrypt라이브러리는 주어진 문자열을 암호화를 해주고, 암호화된 텍스트를 비교검증하여서 True/False 여부를 확인해주는 메서드를 제공해주는 파이썬 라이브러리입니다.

bcrypt.hashpw() - 텍스트 파일 암호화하기

먼저, 라이브러리 사용을 위해서 라이브러리를 설치합니다.


pip install bcrypt 

설치된 bcrypt라이브러리 사용을 위해서 라이브러리를 import하고
Password를 임의의 숫자인 1234로 입력합니다.
bcrypt객체안에 hashpw함수는 두개의 인자를 통해서 바이트타입의 암호화된 값을 변수에 담아줍니다. 바이트타입으로 인코드된 패스워드 값과 bcrypt.gensalt()라는 암호화에 필요한 메서드를 함께 전달합니다.

import bcrypt

password = '1234'
hashed_password = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt())

이제 hashed_password값을 출력하면, 아래와 같이 바이트타입의 값으로 암호화 된것을 확인할수있습니다.

b'$2b$12$YFs9rh.1LgJwZuf9ibyjpuLvBoCaGX0MzedFWF2Jo0zU3lMZurZ4a'

bcrypt.checkpw() - 암호일치 여부 확인

암호화된 비밀번호를 사용자가 입력한 값과 일치여부를 확인하는것은 bcrypt.checkpw()를 이용합니다. 내용확인을 위해서 처음에 암호화했던 숫자를 새롭게 변수에 담습니다. 그리고 암호화된 값을 담은 변수를 같이 bcrypt.checkpw()에 넣고 비교를 합니다.
bcrypt.checkpw()는 True와 False로 값이 나오는 메서드이기때문에 두개의 값이 일치여부를 확인해서 결과를 알려줍니다.

new_password = '1234'
bcrypt.checkpw(new_password.encode('utf-8'),hashed_password)

bcrypt.checkpw()는 바이트타입의 인자를 가지고 비교

checkpw()는 첫번째 인자에서 encode()를 통해서 바이트타입을 변환해주었고, hashed_password변수도 바이트타입의 값을 넣을때 동작합니다. 실제로 DB에 기록할때는 바이트타입으로 저장하지 않고, decode하고 나서 DB에 기록하고, 비밀번호 비교를 위해서 DB에서 가져올때는 스트링타입의 값이기때문에 encode를 해주어서 자료타입을 똑같이 바이트타입으로 바꾸고 나서 비교가 가능합니다.

참고자료

  • 위코드 노션페이지(Backend Auth)
profile
개발공부를 하면서 배우고 경험하고 앞으로 알아가야할것들에 대해서 정리하고 있습니다 🙂

0개의 댓글