[C#] Настоящий Brute Force aka Полный перебор

Тема в разделе "C#", создана пользователем Forgeq, 26.07.18.Просмотров: 325

  1. Forgeq Гость

    Forgeq

    розыгрышей
    Всем Хай! Когда я впервые услышал о Bruteforce, то я представил себе перебор абсолютно все варианты от "a" до over999 "z". Давненько писал полный перебор и вот он, только стоит подумать об исключениях:
    Код:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.IO;

    namespace Cycle
    {
    class Program
    {
    static void Main(string[] args)
    {
    string Chars = "Алфавит";
    for (int i = 0; i <= 3; i++)
    {
    foreach (var Password in GetCombinations(Chars.ToArray(), i))
    Console.WriteLine(Password);
    }
    Console.ReadLine();
    }
    private static IEnumerable<string> GetCombinations(char[] Chars, int MaximumLength)
    {
    if (MaximumLength < 1) yield break;
    foreach (var a in Chars)
    {
    yield return a.ToString();
    foreach (var b in GetCombinations(Chars, MaximumLength - 1)) yield return a + b;
    }
    }
    }
    }
    Данным кодом можно получить абсолютно все комбинации паролей, но на это уйдёт огромное количество времени. Я не говорю, что это самый лучший способ(скорей наоборот), но это и есть настоящий Brute Force.
    Код:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.IO;

    namespace Cycle
    {
    class Program
    {
    static void Main(string[] args)
    {
    Console.Title = "Cycle";
    int Attempt = 0;
    Console.WriteLine("Введите минимальную длину пароля:");
    int MinQuantity = int.Parse(Console.ReadLine());
    Console.WriteLine("Введите максимальную длину пароля:");
    int MaxQuantity = int.Parse(Console.ReadLine());
    string Chars = "aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ0123456789";
    for (int i = MinQuantity; i <= MaxQuantity; i++)
    {
    foreach (var Password in GetCombinations(Chars.ToArray(), i))
    {
    Attempt++;
    Console.WriteLine("Попытка номер:" + Attempt + " | Пароль:" + Password);
    StreamWriter file = new StreamWriter("Passwords.txt", true);
    file.WriteLine(Password);
    file.Close();
    }
    }
    Console.ReadLine();
    }
    private static IEnumerable<string> GetCombinations(char[] Chars, int MaximumLength)
    {
    if (MaximumLength < 1) yield break;
    foreach (var a in Chars)
    {
    yield return a.ToString();
    foreach (var b in GetCombinations(Chars, MaximumLength - 1)) yield return a + b;
    }
    }
    }
    }