Реализуем Алгоритм Грубой Силы «BruteForce» на C#

Приветствую всех! Многие из вас встречали утилиты по BruteForce, а сегодня мы с вами его сами напишем и рассмотрим его реализацию.

Грубый поиск или исчерпывающий поиск, также известный как генерация, подбор символов и тестирование, является очень общим методом решения проблем, который состоит из систематического перечисления всех возможных вариантов решение и проверки того, удовлетворяет ли каждый кандидат поставленной задачи.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BruteForceAlgorithm
{
    class BruteForceAlgo
    {

        public delegate bool BruteForceTest(ref char[] testChars);

        public static bool BruteForce(string testChars, int startLength, int endLength, BruteForceTest testCallback)
        {
            for (int len = startLength; len <= endLength; ++len)
            {
                char[] chars = new char[len];

                for (int i = 0; i < len; ++i)
                    chars[i] = testChars[0];

                if (testCallback(ref chars))
                    return true;

                for (int i1 = len - 1; i1 > -1; --i1)
                {
                    int i2 = 0;

                    for (i2 = testChars.IndexOf(chars[i1]) + 1; i2 < testChars.Length; ++i2)
                    {
                        chars[i1] = testChars[i2];

                        if (testCallback(ref chars))
                            return true;

                        for (int i3 = i1 + 1; i3 < len; ++i3)
                        {
                            if (chars[i3] != testChars[testChars.Length - 1])
                            {
                                i1 = len;
                                goto outerBreak;
                            }
                        }
                    }

                outerBreak:
                    if (i2 == testChars.Length)
                        chars[i1] = testChars[0];
                }
            }

            return false;
        }


        static void Main(string[] args)
        {
            BruteForceTest testCallback = delegate (ref char[] testChars)
            {
                var str = new string(testChars);
                return (str == "bbc");//наш пароль от сейфа :)
            };

            //симолы используемые при подборе abcde , 1=начальное количество символов,5-конечная позиция символов
            bool result = BruteForce("abcde", 1, 5, testCallback);
            Console.WriteLine(result);
            Console.ReadKey();
        }
    }
}

 

Обновлено: 06.01.2020 — 09:36

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.