경기도미래기술학교 AI개발자 부트캠프 24일차 - 파이썬으로 랜덤 비밀번호 생성하기.

2023. 6. 12. 18:19python

반응형

 

import random
import string

def generate_password():
    # 대문자, 소문자, 숫자, 특수 문자를 포함한 모든 문자
    all_characters = string.ascii_letters + string.digits + string.punctuation

    # 대문자, 소문자, 숫자, 특수 문자 각각 한 번 이상 포함하기 위한 초기 비밀번호를 나열.
    random_password = [random.choice(string.ascii_uppercase),
                random.choice(string.ascii_lowercase),
                random.choice(string.digits),
                random.choice(string.punctuation)]

    # 비밀번호 길이 랜덤 설정 (10 ~ 12)
    pw_length = random.randint(10, 12)

    # random_password(4자) 이후의 비밀번호 문자 생성
    for _ in range(pw_length - 4):
        character = random.choice(all_characters)
        random_password.append(character)

    random.shuffle(random_password)

    # 비밀번호 문자 리스트를 문자열로 변환 후 반환
    return ''.join(random_password)

# 비밀번호 생성
random_password = generate_password()
print("생성된 비밀번호:", random_password)

먼저 string 모듈의 string.ascii_letters 는 대소문자 포함한 영어 문자, 

string.digits는 모든 숫자, string.punctuation은 모든 특수문자이다. punctuation이 특수문자라는 뜻인가보다.

 

그리고 ascii_letters 중에서 대문자는 ascii_uppercase, 소문자는 ascii_lowercase를 해줘야 한다.

그렇게 해서 기본적으로 대소문자 하나씩, 숫자, 특수문자 하나는 무조건 포함시키는 문자를 random을 통해 만든다.

 

비밀번호 길이는 10~12자로 하기 때문에 randint를 사용해서 범위 설정을 해줬다. randint는 뒤에 오는 인수의 값도 포함을 시키기 때문에 10~12까지의 숫자가 랜덤으로 표시될 것이다.

 

그 다음 for _ in range. 언더 바 사용은 처음 해본다. 반복문을 쓸 때 굳이 i가 필요하지 않다면 개발자 작성 형식 상 언더 바를 쓴다고 한다. 

아무튼 그 character를 pw_length-4만큼 반복해서 붙여준다.

 

그다음 셔플을 하는데, 주의해야할 것이 shuffle은 반환 값이 None이다. List를 String화 하려면 str() 이거로 하면 안되고 ''.join()이나 다른 방법을 쓰면 된다고 한다.

 

https://codechacha.com/ko/python-convert-list-to-string/

 

Python - 리스트를 문자열로 변환

List를 문자열로 변환하는 방법을 소개합니다. 반복문을 이용하여 리스트를 문자열로 변환하는 코드를 구현, `join()`을 이용하면 다음과 같이 리스트를 문자열로 변환할 수 있음, 또한, `map()`과 joi

codechacha.com

이렇게 하면 비밀번호 랜덤 생성이 가능하다.

728x90