브루트 포스법(Brute Force Method)

Steve Jack·2021년 10월 4일
0
  • 조합 가능한 모든 문자열을 하나씩 대입해 보는 방식으로 암호를 해독하는 방법

브루트 포스 공격(brute force attack)에서 유래되었고 무차별 대입 공격등으로도 부른다. 흔히 수학 문제를 원시적으로 푸는 방법인 '수 대입 노가다' 방법이며, 주로 암호학에서 연구되는 방법이나, 다른 알고리즘 분야에서도 사용되고 있다.
대부분의 암호화 방식은 이론적으로 무차별 대입 공격에 대해 안전하지 못하며, 충분한 시간이 존재한다면 암호화된 정보를 해독할 수 있다. 하지만 대부분의 경우 모든 계산을 마치려면 실용적이지 못한 비용이나 시간을 소요하게 되어, 공격을 방지하게 한다.


부르트 포스법으로 문자열1에서 문자열2를 검색하는 프로그램

bf_match의 함수의 문자열1이 텍스트(txt)이고, 문자열2가 패턴(pt)이라 하였다. 검색이 일치하면 문자열1의 가장 첫번째 인덱스 + 1을 반하고 불일치하면 -1을 반환한다.

/* 브루트 포스법으로 문자열을 검색하는 프로그램 */
#pragma warning (disable:4996)
#include <stdio.h>

/*--- 브루트-포스법으로 문자열을 검색하는 함수 ---*/
int bf_match(const char txt[], const char pat[])
{
	int pt = 0;		/* 텍스트 커서 */
	int pp = 0;		/* 패턴 커서 */
	while (txt[pt] != '\0' && pat[pp] != '\0') {
		if (txt[pt] == pat[pp]) {
			pt++;
			pp++;
		}
		else {
			pt = pt - pp + 1;
			pp = 0;
		}
	}
	if (pat[pp] == '\0')
		return pt - pp;
	return -1;
	
}

int main(void)
{
	int idx;
	char s1[256];		/* 텍스트 */
	char s2[256];		/* 패턴 */

	puts("브루트-포스법");
	printf("텍스트 : ");
	scanf("%s", s1);
	printf("패턴 : ");
	scanf("%s", s2);

	idx = bf_match(s1, s2);	/* 텍스트(s1)에서 패턴(s2)을 브루트-포스법으로 검색합니다. */
	if (idx == -1)
		puts("텍스트에 패턴이 없습니다.");
	else
		printf("%d번째 문자부터 match합니다.\n", idx + 1);

	return 0;
profile
To put up a flag.

0개의 댓글