|
02.08.2010, 21:18
|
#1
|
|
|
|
Главнокомандующий
|
Регистрация: 20.01.2010
Сообщений: 1,539
Популярность: 22780
Золото Zhyk.Ru: 600
Сказал(а) спасибо: 43
Поблагодарили 1,717 раз(а) в 538 сообщениях
|
Теория брута. Часть 2. C# version
> Теория брута. Часть 2 <
Данная статья является продолжением серии статей на тему о том что такое Брутфорс.
В данном гайде речь пойдет о генерации случайных паролей. Данный вид генерации паролей не лучшим образом подходит для брутфорса, но мы начнем именно с него, чтобы иметь понятие вообще о генерации
Конечный материал данной статьи (скрин):
Давайте приступим к реализации: - Для реализации данного проекта были созданы следующие классы:
- PasGen.cs
Статический класс, реализующий сам алгоритм генерации.
- Рассмотрим структуру нашего класса:
Код:
public static class PassGen
{
// Объявляем диапазоны, из частей которых будет состоять наш пароль
private static string dictAlphaLower = "qwertyuiopasdfghjklzxcvbnm";
private static string dictAlphaUpper = "QWERTYUIOPASDFGHJKLZXCVBNM";
private static string dictNumeric = "0123456789";
private static string dictSymbols = "!@#$%^&*()_+-=";
// Единственный метод класса, который генерирует пароли.
// На вход метод принимает 4 флага, которые используются для определия,
// из каких словарей собирать пароль, а так же 2 числовые переменные,
// одна из которых длина пароля, а другая кол-во паролей для генерации
public static string Generate(bool alphaL, bool alphaU, bool numeric, bool symbols, int length, int count)
{
// Объявляет переменную, в которой мы получим конечный словарь для генерации
string dict = string.Empty;
// Составляем конечный словарь, ориентируясь по флагам,
// которые мы передали в метод как параметры
if (alphaL) dict += dictAlphaLower;
if (alphaU) dict += dictAlphaUpper;
if (numeric) dict += dictNumeric;
if (symbols) dict += dictSymbols;
// Если конечный словарь у нас пустой, прекращаем выполнения метода.
if (dict.Length == 0) return "Словарь не выбран!";
// Объявляет объект класса Random, с помощью которого
// мы будем получать случайные числа
Random rnd = new Random();
// Создаем объект билдера строк, для конечного результата
StringBuilder rtnStr = new StringBuilder();
// Создаем объект билдера строк, для хранения пароля
StringBuilder pwd = new StringBuilder();
// Пишем вступление (для красоты сделал)
rtnStr.AppendFormat("Генерация паролей: {0} шт.\r\nДлина: {1}\r\n---------------------------\r\n\r\n", count, length);
// Запускаем цикл, который будет бегать столько раз
// сколько паролей мы хотим получить
for (int i = 0; i < count; i++)
{
// Переинициализируем билдер, чтобы записывать в него новый пароль
pwd = new StringBuilder();
// Запускаем цикл, который будет бегать столько раз
// сколько символов в пароле мы хотим получить
for (int k = 0; k < length; k++)
{
// Каждую итерацию цикла мы добавляем новый символ в билдер пароля
// Генерируя число от 0 до длинны словаря, мы получаем элемент словаря,
// а именно один символ по его индексу
pwd.Append(dict[rnd.Next(0, dict.Length)]);
}
// После того, как вложенный цикл закончил генерацию пароля,
// добавляем его(пароль) в конечный результат
rtnStr.AppendFormat("{0}\r\n", pwd.ToString());
}
// Возвращаем конечный результат
return rtnStr.ToString(); ;
}
}
Код полностью закомментирован, чтобы вам было проще понять что именно выполняется в данный момент времени.
Результаты:
Вот как выглядит результат генерации 10 паролей длиной 10 символов при использовании всех описаных мной словарей.
|
Цитата: |
|
|
|
|
Сообщение от Password Generator |
|
|
|
|
|
|
|
n*HpEIg77a
b^RWS6=5Dj
-mu5Fh8k5&
N^nJC3U0X4
kK)Cn4D6Oj
2PM_S-@8Zd
V_w^AUJ@36
Qbs6-TRPU7
1w6HfgjWtV
&CuIixHta&
|
|
|
|
|
|
- В конечном счете у нас получился простой генератор паролей, который можно использовать как для защиты так и для нападения.
Но хочется все же отметить, что для защиты он подходит гораздо лучше.
Следующая статья будет посвещена последовательной генерации паролей, а именно такого вида:
|
Цитата: |
|
|
|
|
Сообщение от Результат |
|
|
|
|
|
|
|
aaaaa
aaaab
aaaac
...
aaaba
aaabb
aaabc
... и т.д.
|
|
|
|
|
|
Во вложении находится готовый проект на Visual Studio 2010.
________________
Fireball - Быстрое снятие и загрузка скриншотов на хостинг.
|
|
|
7 пользователя(ей) сказали cпасибо:
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 14:28.
|
|