가상환경 생성
pip install bcrypt
bcrypt: 암호를 해싱해주는 라이브러리
import bcrypt
password = '1234'
레인보우 테이블을 이용한 공격을 막기 위해 솔트값을 추가해 해쉬값을 강화
bcrypt.hashpw(password, bcrypt.gensalt())
실행하면 TypeError: Unicode-objects must be encoded before hashing이 뜸
Why?
바이트형 데이터만이 해싱 가능하다. 따라서 인코딩을 거쳐야하기 때문.
문자열(string)타입의 데이터를 ASCII 또는 utf8 형식의 bytes 타입으로 바꾸거나(encoding) 그 반대(decoding)으로 바꾸는 것을 말함
encoded_password = password.encode('utf-8')
decoded_password = encoded_password.decode('utf-8')
hashed_password =
bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt())
bcrypt.gensalt()를 입력할 때마다 솔트값이 달라지는 것을 볼 수 있음
salt= bcrypt.gensalt()
로 솔트값 하나를 저장
hashed_password =
bcrypt.hashpw( password.encode('utf-8'), salt)
형식: bcrypt.checkpw(password, hashed)
bcrypt.checkpw('1234'.encode('utf-8'), hashed_password)
bcrypt는 단방향 해쉬 알고리즘이므로 솔팅, 스트레칭을 하고 나면 복호화가 불가능에 가깝다