코딩 테스트 유형보기 3 - 브루트 포스

2022. 6. 16. 08:13프로그래밍 언어/코딩테스트준비

유형보기 3 - 브루트 포스



브루트 포스


출처 

https://marisara.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%8B%A4%EC%A0%84-%EB%B8%8C%EB%A3%A8%ED%8A%B8-%ED%8F%AC%EC%8A%A4-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-1-for%EB%AC%B8%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%B8%8C%EB%A3%A8%ED%8A%B8-%ED%8F%AC%EC%8A%A4

 

브루트 포스 ( Brute-Force, 완전탐색)

 

완전 탐색법이라고도 불리는 브루트포스 알고리즘은 무차별 대입법이라고도 하는데,

가능한 모든 경우의 수를 구하고 답을 찾아내는 알고리즘을 의미한다.

 

파이썬에서 브루트 포스를 구현하려면  모든 경우의 수를 만들수 있어야함.

이러한 경우의 수를 만들어주는 것은 itertools 모듈의 product 함수이다.

 

itertools 모듈에는 여러 조합을 만드는 방법이 있지만 브루트포스 프로그램에서는 product를 사용

 

product 모듈 사용방법

# A : 조합을 만들 소스
# B : 원하는 조합의 자릿수
list = product(A, repeat=B)

예시

import time
from itertools import product


password = "world1"
number = "0123456789"
lowercase = "abcdefghijklmnopqrstuvwxyz"
uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
symbol = "!@#$%^&*()_+-=`~"
possibility = lowercase + number
attempt = product(possibility, repeat=len(password))
start = time.time()


def run():
    for i in attempt:
        if "".join(i) == password:
            print("비밀번호 : " + str("".join(i)))
            print("소요시간 : " + str(time.time() - start))


run()