🔐 Django 비밀번호 암호화와 검증 완전 정리

2025. 5. 13. 11:45·기술블로그-Django편

🔐 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
'기술블로그-Django편' 카테고리의 다른 글
  • ✅ Django SECRET_KEY를 안전하게 설정하는 방법
  • ✅ Django Form 필드 접근 완전 이해하기 - 비유로 풀어보는 설명
  • 🧠 Django ORM 객체 생성과 저장의 차이 완전 정리!
  • ✅ 특정 마이그레이션으로 되돌리기 (migrate 앱명 마이그레이션번호)
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (717) N
      • Python (32)
      • 프로젝트 (55) N
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (41) N
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (153)
      • 기술블로그-Flask편 (36)
      • AI 분석 (5) N
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
🔐 Django 비밀번호 암호화와 검증 완전 정리
상단으로

티스토리툴바