본문 바로가기
알고리즘 && 자료구조

브루트 -포스법

by bloodFinger 2020. 7. 28.

설명

 

나무위키

"

Brute force

조합 가능한 모든 문자열을 하나씩 대입해 보는 방식으로 암호를 해독하는 방법.

브루트 포스 공격(brute force attack) 또는 키 전수조사(exhaustive key search), 무차별 대입 공격(無差別代入攻擊) 등으로도 부른다. 흔히 수학 문제를 원시적으로 푸는 방법인 '수 대입 노가다'의 학술적 버전이다. 주로 암호학에서 연구되는 방법이나, 다른 알고리즘 분야에서도 사용되고 있다.

"

 

 

 

 

 

이미 검사를 진행한 위치를 기억하지 못하므로 부르트-포스법의 효율은 좋지 않다고 할 수 있다!

 

 

 

 

예제

package 문자열검색;

import java.util.Scanner;

public class P8_1 {

    static int bfMatch(String txt , String pat){
        int pt = 0;   //txt 커서
        int pp = 0;   //pat 커서

        while(pt != txt.length() && pp != pat.length()){
            if(txt.charAt(pt) == pat.charAt(pp)){
                pt++;
                pp++;
            }else{
                pt = pt - pp +1;
                pp = 0;
            }
        }
        if(pp == pat.length()){
            return pt-pp;
        }
        return -1;
    }

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        System.out.print("텍스트 : ");
        String s1 = scan.next();

        System.out.println("패턴 : ");
        String s2 = scan.next();

        int idx = bfMatch(s1,s2);

        if(idx == -1){
            System.out.println("텍스트에 패턴이 없습니다.");
        }else {
            int len = 0;
            for (int i =0; i<idx ; i++){
                len += s1.substring(i , i+1).getBytes().length;
            }
            len += s2.length();

            System.out.println((idx + 1) + "번째 문자부터 일치합니다.");
            System.out.println("텍스트 : " + s1);
            System.out.printf(String.format("패턴 : %%%ds\n" , len) , s2);
        }
    }
}

 

결과