가능한 모든 문자조합을 대입해보는 공격을 무차별 대입, 또는 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 |