일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 파이썬 #파이썬프로젝트 #파이썬 예시 #파이썬 파일경로 #파이썬 자동화
- 파이썬 #
- 파이썬
- 패스트 캠퍼스 #자율주행 #비전
- 파이썬 프로젝트
- 파파고 번역
- 리눅스기초#리눅스명령어#리눅스 tail#tail#모의해킹 리눅스
- PDF 개행문자
- ROS #Robotics #ROS기초
- 파이선 행
- 파이썬 엑셀 파일 읽고 쓰기
- 논문번역 꿀팁
- 통계 #ROC #TPR #FPR #TNR #이진분류 #Accuracy #Recall
- 파이썬 예시
- 파이썬 채팅
- QGC#QGrouncControl#GLIB오류
- 크롬오류#크롬검색어자동완성끄기#검색어자동완성오류#검색어자동완성 제거#검색어 노란선#검색어반복입력
- 파이썬 텍스트 변환 #파이썬 공부
- 파이썬 파일 전송
- 파이썬#subprocess#communicate()
- pdf 번역
- 파이썬#파이썬경로#파이썬폴더#파이썬디렉토리
- 파파고 꿀팁
- ROS #spin() #spinOnce() #ROS기초
- 파이썬 유튜브
- 파이썬 음성인식
- 스트림 암호 one-time-pad 공격#보안#암호
- 파이썬 열
- 파이썬 음성파일 텍스트 변환
- 리눅스#모의해킹#리눅스명령어#head 명령어
개발자비행일지
파이썬으로 브루트포스 조합생성기 만들기 본문
파이썬의 itertools를 활용하여, 숫자와 문자로 구성된 브루트포스 조합생성기 만들기 |
import itertools choices = '0123456789abcdef' MaxLength = 4 f = open('res.txt', 'w') for length in range(0,MaxLength+1): for entry in itertools.product(choices,repeat = length): password = '0'*(MaxLength - length) password += ''.join(entry) print(password) f.write(password+'\n') f.close() |
iterable과의 곱을 자체적으로 계산하려면 repeat 키워드 인수를 사용하여 반복 횟수를 지정하여 사용할 수 있다. 예를 들어, product(A, repeat=4)
은 product(A, A, A, A)
과 동일 함을 의미하며, 아래의 예를 통해서 이 함수가 어떻게 동작하는지 알아보자.
우리가 위에서 사용하는 itertools 모듈의 product 함수는 아래와 같이 정의 되어 있다.
def product(*args, repeat=1): # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111 pools = [tuple(pool) for pool in args] * repeat result = [[]] for pool in pools: result = [x+[y] for x in result for y in pool] for prod in result: yield tuple(prod) |
위의 예제에서 우리가 활용한 부분은 product(range(2), repeat=3) --> 이 부분이다. 이 코드의미는 range(2) 즉 0,1을 조합하여 repeat =3
길이가 3인 000, 010, 001과 같은 조합을 생성하겠다는 것이다.
자 이제 위의 조합 생성기 소스코드를 분석해 보자.
먼저 우리는 itertools 모듈이 제공하는 product 함수를 사용하기 위해서 import 문을 실행해 준다.
choices = '0123456789abcdef'
choices라는 문자열을 생성해서 우리가 사용할 숫자와 문자 조합의 재료가 되는 변수이다.
MaxLength = 4
암호를 몇자리 까지 사용할 지 설정해 준다.
f = open('res.txt', 'w')
암호 조합 결과를 저장할 파일을 열어주는 객체로 f를 선언한다.
for length in range(0,MaxLength+1):
암호조합을 0 부터 MaxLength 까지 생성한다.
for entry in itertools.product(choices,repeat = length):
product 함수를 사용해서 choices라는 문자열의 재료를 가지고 repeat에 설정된 length 길이 만큼 반복한다.
password = '0'*(MaxLength - length)
암호조합 초기화 값이다. 길이에 따라서 0000 부터 000 00 0 ''까지 설정가능
password += ''.join(entry)
join 함수를 사용해서 초기 값에 우리가 반환한 조합 값을 더해준다.
print(password)
결과값을 화면에 한 줄씩 출력한다.
f.write(password+'\n')
파일에 비밀번호를 작성하고 줄 바꿈을 입력한다.
f.close()
실행결과
'▶ Python' 카테고리의 다른 글
파이썬으로 10진법에서 2진법 16진법 으로 변경하기 (0) | 2020.03.22 |
---|---|
파이썬 함수2 (0) | 2018.12.24 |
파이썬 함수1 (0) | 2018.12.24 |
파이썬 GUI 데이터와 클래스_기본 자료형 (0) | 2018.11.26 |
파이썬 GUI 메시지 박스 (0) | 2018.11.26 |