set_password
사용자의 비밀번호를 안전하게 저장할 수 있도록 해시(hashing) 처리를 해주는 메서드
- 평문으로 입력된 비밀번호를 해시화하여(암호문으로 변경하여) 데이터베이스에 저장
- 직접 평문 비밀번호를 저장하지 않음
- 해시 알고리즘을 사용해 암호문으로 변경되기 때문에 보완성이 보장됨
- UserCreationForm은 내부적으로 set_password를 사용하여 비밀번호를 해시화함
from django.contrib.auth.models import User
# 사용자 생성
user = User(username='example_user')
# 비밀번호 해시화
user.set_password('password12341234')
# 데이터베이스에 저장
user.save()
- 비밀번호 검증
- 검증 성공 : "데이터 베이스의 암호문 값" == "로그인 시도할 때 입력한 패스워드를 암호문으로 변경한 값"
- set_password 호출 후 반드시 save() 메서드를 호출해야 데이터베이스에 저장됨
- set_password를 사용하지 않고 직접 해시된 비밀번호를 저장하려고 하면 보안 문제가 발생 가능
from django.contrib.auth.hashers import check_password
user = User.objects.get(username='example_user')
if check_password('password12341234', user.password):
print("비밀번호 일치!")
else:
print("비밀번호 불일치")
- 사용자 비밀번호 해시 알고리즘 (settings.py의 PASSWORD_HASHERS)
- 가장 안전한(강력한 보안) 알고리즘 Argon2
- 기본 해시 알고리즘 PBKDF2
- SHA1 기반 PBKDF2
- SHA256 기반 Bcrypt
PASSWORD_HASHERS = [
'django.contrib.auth.hashers.Argon2PasswordHasher', # Argon2 알고리즘
'django.contrib.auth.hashers.PBKDF2PasswordHasher', # PBKDF2 (기본 해시 알고리즘)
'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher', # SHA1 기반 PBKDF2
'django.contrib.auth.hashers.BCryptSHA256PasswordHasher', # SHA256 기반 Bcrypt
]