🔐 Django 비밀번호 암호화와 검증 완전 정리
비밀번호를 안전하게 저장하고 검증하기 위한 Django의 핵심 메서드인 make_password()와 check_password()의 작동 원리를 이해하고 실습 예제를 통해 정리합니다.
1. 🔧 make_password() - 비밀번호 해시화
from django.contrib.auth.hashers import make_password
hash1 = make_password("password")
hash2 = make_password("password")
✅ 특징
- 같은 문자열이라도 해시값이 다르게 생성됨
- 이유: Django는 내부적으로 **salt(소금값)**를 랜덤하게 추가하여 해시를 생성하기 때문
- 결과:
print(hash1 == hash2) # False
🔐 목적
- 해커가 비밀번호 DB를 탈취하더라도 동일한 해시값이 없게 만들어 무차별 대입 공격 방지
2. ✅ check_password() - 비밀번호 확인
from django.contrib.auth.hashers import check_password
check_password("password", hash1) # True
check_password("password", hash2) # True
💡 작동 방식
- 입력한 평문 비밀번호를 동일한 방식으로 해시 처리
- 저장된 해시값과 비교하여 일치 여부 확인
3. 🧠 시각화 흐름 정리
입력값: "password"
↓
make_password("password")
↓
hash1 = 'pbkdf2_sha256$260000$abcd...'
hash2 = 'pbkdf2_sha256$260000$xyz...' (다름!)
↓
check_password("password", hash1) → ✅ True
check_password("password", hash2) → ✅ True
4. ✅ 요약 비교표
함수 역할 사용 시기 결과
make_password() | 평문 → 해시화 | 회원가입, 비밀번호 변경 시 | 저장용 해시 생성 |
check_password() | 평문 vs 해시 비교 | 로그인 인증 시 | True / False 반환 |
5. 📌 실전 팁
- 사용자 객체 생성 시 해시 적용:
from django.contrib.auth.hashers import make_password
user = CustomUser.objects.create(
username="user4",
password=make_password("password")
)
- 혹은 create_user() 사용 시 내부적으로 set_password() 적용됨:
CustomUser.objects.create_user(username="user4", password="password")
✅ 결론
- Django는 매번 다른 해시값을 생성함으로써 보안을 강화합니다.
- check_password()는 동일한 평문 입력을 정확히 확인 가능하게 합니다.
- 실무에서는 항상 평문 비밀번호를 그대로 저장하지 말고 해시 처리해야 합니다!
이제 set_password()와 create_user()의 내부 흐름도 함께 보고 싶다면 다음 포스팅에서 이어드립니다! 😊
'기술블로그-Django편' 카테고리의 다른 글
✅ Django SECRET_KEY를 안전하게 설정하는 방법 (0) | 2025.05.13 |
---|---|
✅ Django Form 필드 접근 완전 이해하기 - 비유로 풀어보는 설명 (0) | 2025.05.13 |
🧠 Django ORM 객체 생성과 저장의 차이 완전 정리! (0) | 2025.05.13 |
✅ 특정 마이그레이션으로 되돌리기 (migrate 앱명 마이그레이션번호) (0) | 2025.05.13 |
💡 SQL 쿼리와 ORM의 차이점 완전 정복! (0) | 2025.05.13 |