카테고리 없음

Django_set_password 함수

멍주다배 2025. 1. 20.

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
]