[예제#3] 비밀번호 생성기: 안전한 랜덤 패스워드 만들기
한줄 요약:
영문 대/소문자 + 숫자 + 특수문자를 조합해 강력한 랜덤 비밀번호를 자동으로 만들어보자!
파이썬으로 강력한 랜덤 비밀번호 생성기 만들기. secrets 모듈, 대소문자·숫자·특수문자 포함 보장, 모호문자 제외 옵션까지 제공하는 실전 예제.
1. 목표
- 원하는 길이로 무작위 비밀번호 생성
- 대문자/소문자/숫자/특수문자 포함 보장
- 옵션으로 모호한 문자(I/l/O/0 등) 제외 지원
2. 완성 코드 (복붙)
# 비밀번호 생성기
import secrets
import string
def generate_password(length=12, exclude_ambiguous=True):
"""
length: 비밀번호 길이 (기본 12)
exclude_ambiguous: 모호한 문자(I, l, O, 0 등) 제외 여부
"""
# 기본 문자집합
uppercase = string.ascii_uppercase
lowercase = string.ascii_lowercase
digits = string.digits
symbols = "!@#$%^&*()-_=+[]{};:,.?/"
# 모호한 문자 제거(선택)
if exclude_ambiguous:
ambiguous = "IlO0"
for ch in ambiguous:
uppercase = uppercase.replace(ch, "")
lowercase = lowercase.replace(ch, "")
digits = digits.replace(ch, "")
# 각 그룹에서 최소 1개 보장
mandatory = [
secrets.choice(uppercase),
secrets.choice(lowercase),
secrets.choice(digits),
secrets.choice(symbols),
]
# 남은 길이만큼 모든 풀에서 채우기
pool = uppercase + lowercase + digits + symbols
remaining = [secrets.choice(pool) for _ in range(max(0, length - len(mandatory)))]
# 섞기 (시크릿스 안전 셔플)
password_list = mandatory + remaining
# secrets 모듈에는 shuffle이 없어 무작위 인덱스로 섞기
shuffled = []
while password_list:
idx = secrets.randbelow(len(password_list))
shuffled.append(password_list.pop(idx))
return "".join(shuffled)
if __name__ == "__main__":
print("강력 비밀번호(12자):", generate_password(12))
print("모호문자 포함 허용, 16자 :", generate_password(16, exclude_ambiguous=False))
3. 사용 방법
- 위 코드를
password_gen.py로 저장 - 터미널에서 실행:
python password_gen.py - 결과 예시:
강력 비밀번호(12자): xA%7p}fW!m4@ 모호문자 포함 허용, 16자 : L0g@q8R}yH7!aM#2
✨ 포인트 설명
secrets모듈: 보안용 난수에 적합(비밀번호 생성에 권장)- 문자 그룹 최소 1개 보장: 대/소문자·숫자·특수문자 각각 하나는 반드시 포함
- 모호문자 제거 옵션:
I, l, O, 0등 헷갈리는 문자 제외 가능
🔧 커스터마이즈 팁
- 특수문자 세트 바꾸기: 서비스 정책에 맞게
symbols문자열 수정 - 기본 길이 조정:
generate_password(length=16)같이 늘리면 안전성↑ - 여러 개 일괄 생성:
for _ in range(5): print(generate_password(14))
🧪 빠른 강도 체크(간단 기준)
- 길이 12자 이상
- 대문자/소문자/숫자/특수문자 모두 포함
- 연속/반복 문자(예:
aaa,1234) 피하기 → 필요하면 후처리로 검사 추가
🚨 주의사항
- 콘솔에 출력된 비밀번호는 복사 후 안전한 비밀관리 앱(예: 키체인, Bitwarden 등)에 저장
- 소스코드/깃 저장소에 실제 비밀번호를 절대 하드코딩하지 말 것
4. 연습문제
- 길이 20자 비밀번호 10개를 만들어 출력해보세요.
- 숫자를 최소 2개 이상 포함하도록 검증 로직을 추가해보세요.
- 금지어(예: 사이트명)가 포함되면 재생성하도록 만들어보세요.
이전 강좌 👈 [예제#2] 뽀모도로 타이머(콘솔 버전)
다음 강좌 👉 [자동화#1] 파일 이름 일괄 변경(사진 정리 필수 루틴)