본문 바로가기

Programming/Algorithm

[Python3] BruteList

가능한 모든 문자조합을 대입해보는 공격을 무차별 대입, 또는 Brute Force Attack이라고 한다. 주로 비밀번호를 알아낼 때 쓰이는데, 당연히 비밀번호가 길수록 시간이 오래걸린다. 하지만 그만큼 확실한 방법이기도 하다. 이런 공격을 막기위해 (실제론 오래걸리게해서 포기할 수준이게) 비밀번호를 영어 대문자,소문자,숫자,특수기호를 섞어 12자리 이상으로 만드는 것을 추천한다.

https://howsecureismypassword.net/

에서 자신의 비밀번호가 얼마나 취약하고 얼마만에 뚫리는지 알려준다. 사이트 마다 비밀번호를 다르게 만들면 자주 잊어버리는데, 몇가지 팁이있다.

예를 들어 티스토리 비밀번호는 '타이스토리비밀번호닷13579!@##'로,

페이스북 비밀번호는 '얼굴책비밀번호닷13579!@##' 같이 만들면 강력하게 만들 수 있다.

각설하고 코드나 보자..

from itertools import product
def unique(x):    #숫자야구게임만들 때 만든함수 재활용
for k in x:
if (x.count(k) >= 2):
return False
return True

name = input("Input name: ")

while(1):
chars = input("Input char (N to use all number and all small eng): ")
if(chars.lower() == "n"):
chars = '0123456789qwertyuiopasdfghjklzxcvbnm' # Chars Dictionary
if(unique(chars)): break
else:
print("Detect not unique char! \nUser input: "+chars)
temp = input("Auto delete multiple char continue? (Y/N): ").lower
if(temp == 'y'):
list(set(chars))    #set이라는 데이터타입은 중복을 허용하지 않기에 set으로 지정했다가 다시 리스트로 만들었다.
break
elif(temp == 'n'): continue
else:
print("Wrong input!")
continue

a, b = input("Input range with comma: ").split(',')


file = open(name, "w")
for i in range(int(a), int(b)): #length
temp = product(chars, repeat=i)    #product(문자, repeat=숫자) 는 문자를 숫자만큼의 조합리스트를 만든다.
for j in temp:                    #예를들어 product('abc', repeat=2)이라면 [ab,ac,bc]가 된다.
brute = ''.join(j)
file.write(brute+"\n")
file.close()

Pycharm을 처음 써봤는데 =이나 + 같은 기호 양옆은 공백을 두라거나, 이 변수는 저기서 사용됐다는 식으로 조언을 많이 해준다. if(조건)에 괄호를 붙이지 말라는 조언도 있었지만, 이것만큼은 무시하고 사용했다.


'Programming > Algorithm' 카테고리의 다른 글

[Python3] 웹 페이지 파싱  (3) 2017.02.08
[Python3] 3 6 9 게임  (0) 2017.01.22
[Python3] 대칭수찾기  (0) 2016.12.28
[Python3] 푸쉬푸쉬  (0) 2016.12.25
[Python3] 변수 스왑  (0) 2016.12.11