본문 바로가기
코딩 따라하기

패스워드 생성기 따라하기 (Coding Password Generator)

by 전자남성 2020. 11. 18.

패스워드 생성기 따라하기 (Coding Password Generator)

 

오늘은 패스워드 생성기 코드를 따라 해 보겠습니다..

이미 워낙 유명하지만 모든 코딩은 직접 작성해보는데 의의가 있다고 생각합니다.

 

import string

import random

 

source = string.ascii_letters

source = source + string.digits

source = source + string.punctuation

 

count = input("Enter the number of digits: ")

count = int(count)

 

result = random.sample(source, count)

password = "".join(result)

print("Generated password: ", password.strip())

 

1행은 파이썬에서 스트링 패키지를 가져옵니다.

2행은 파이썬에서 랜덤 패키지를 가져옵니다.

 

3행은 스트링 패키지 내에서 ASCII 레터를 가져옵니다.

ASCII 레터는 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'를 지칭합니다.

즉 영어 소문자 알파벳 'a~z'와 영어 대문자 알파벳 'A~Z'까지 총 52자가 ASCII 레터입니다.

 

4digit은 스트링 패키지 내에서 우리가 흔히 쓰는 숫자입니다.

간단히 '0,1,2,3,4,5,6,7,8,9'를 의미합니다.

 

5punctuation은 스트링 패키지 내에 구두점 문자로 간주하는 ASCII 문자의 문자열입니다.

다음과 같은 특수 문자들을 의미합니다. '!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~.'

 

6행 입력 문구에는"Enter the number of digits: "을 넣어봤습니다.

76행에서 원하는 digits을 넣게 되면 int형 숫자로 인식하게 됩니다.

예를 들어 6행에서 3을 넣으면 7행에서 'count=int(3)'의 형태로 인식하게 됩니다.

 

8행에서 'random.sample'은 랜덤 하게 여러 개의 원소를 선택합니다.

간단히 예를 들어 보겠습니다.

'random.sample([6,7,8,9,0], 3)'이 예제입니다.

여기서 '[6, 7, 8, 9, 0]'은 원소입니다. 가로 오른쪽 3은 선택할 수 있는 원소 개수입니다..

따라서 '[6, 7, 8, 9, 0]' 안에서 랜덤 하게 3개의 원소를 선택할 수 있습니다.

'[6, 0, 9]' 같은 형식으로 원소가 선택됩니다.

그럼 이 방식을 가지고 다시 8행으로 가보겠습니다.

우리는 'random.sample(source, count)' 형식으로 사용했습니다.

count6행의 "Enter the number of digits"이 됩니다.

원소인 source'string.ascii_letters, source''string.digits''source + string.punctuation'이 됩니다.

즉 원소는 '[a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,

0,1,2,3,4,5,6,7,8,9, !,",#,$,%,&,',(,),*,+,,,-,.,/,:,;,<,=,>,?,@,[,\,],^,_,`,{,|,},~,.]'까지 되는 겁니다.

 

 

9행의 Join 함수는 String 리스트를 하나의 String으로 합쳐주는 역할을 합니다.

예를 들어 '%, 9, c'가 출력되면 Join'%9c' 형태로 합쳐줍니다.

위에서는 "".join(result)를 사용했는데 %와 9c 사이를 딱 붙여서 합쳐준다고 이해하시면 됩니다.

예를 들어 ",".join(result)를 사용하면 '%,9,c' 형태로 출력이 되는 것입니다.

"".join(result) = %9c

",".join(result) = %,9,c

 

 

마지막행에서 패스워드가 생성됩니다. 입력한 "Genenrated password: @@@@@@" 형식으로 출력됩니다.

코드 마지막 부분에 strip 함수가 나옵니다. strip은 빈 공간을 제거해줍니다.

예를 들어 띄어쓰기, , 엔터 등등에서 생기는 빈 공간을 없애줍니다.

패스워드 입력할 때 빈 공간을 넣지 않는 일도 굉장히 중요합니다.

따라서 'password.strip()'을 사용하면 깔끔하게 패스워드를 출력할 수 있습니다.

 

그럼 오늘도 VSCodeTERMINAL에서 실행해보겠습니다.

C:\Users\ATIV\Downloads\myworks>python .\RandomPassword.py을 입력합니다.

C:\Users\ATIV\Downloads\myworks>python .\RandomPassword.py

Enter the number of digits: 6

Generated password: m%8Eh}

 

C:\Users\ATIV\Downloads\myworks>python .\RandomPassword.py

Enter the number of digits: 6

Generated password: ONb!nu

 

C:\Users\ATIV\Downloads\myworks>python .\RandomPassword.py

Enter the number of digits: 6

Generated password: R>Hu2a

 

저도 요즘 공부하면서 많은 것을 느낍니다.

모르는 함수나 메서드는 구글링 해서 찾아보거나 자주 애용하는 카페에 질문하는 것도 좋은 방법이 되는 것 같습니다.

댓글