반응형
password 암호화시 bcrypt 방식으로 하기로 하였다.
사용 라이브러리 : bcrypt
#install
pip install bcrypt
pip3 install bcrypt
# 안되는 경우안되는 경우 pip version >= 20 안되는거 일수도 있으니 pip을 update 해주자.
python -m pip install -U pip
import bcrypt
import mysql.connector
# 암호화
data = {id:'test', password: '123'}
passwordSalt = bcrypt.gensalt()
passwordHash = bcrypt.hashpw(data['password'], passwordSalt)
# 에러남
TypeError: Unicode-objects must be encoded before hashing
# bcrypt를 불러오고 password라는 변수에 str 형식의 암호화 할 대상으로 하면 에러가 난다고 한다.
# 암호화 함수는 오직 bytes string에서만 작동한다고한다.
# 해싱하기 전에 password를 bytes string으로 변환 필요
# utf8 인코딩은 str 형태일 진행
password = password.encode('utf-8')
# 암호화
passwordHash = bcrypt.hashpw(password, passwordSalt)
# 실제 저장되는 값
#decode 후 저장하지 않으면 나중에 checkpw 할때 ValueError: Invalid salt 에러가 나온다.
insertPasswordHash = passwordHash.decode()
# 확인
inputPassword = '123'
dbconn = mysql.connector.connect(**config)
cursor = dbconn.cursor(dictionary=True)
sql = 'select * from users where id = "test"';
cursor.execute(sql)
result = cursor.fetchone()
bcrypt.checkpw(inputPassword.encode('utf-8'), result['pw'].encode('utf-8'))
# 결과
true
false
참조
반응형
'프로젝트 설정 > 기타' 카테고리의 다른 글
[Linux] 예약/반복 작업 (crontab/script) + mysqldump (0) | 2021.06.10 |
---|---|
[supervisor ] 10분만에 익히는 supervisor 설치와 사용법 (0) | 2021.06.08 |
HTTPS / SSL / TLS (0) | 2021.03.09 |
NCLOUD 사용기 (서버생성) (0) | 2021.02.15 |
[GIT] reset 한거 취소하는 방법 (0) | 2020.03.18 |