Это маленький, но полезный метод для генерации словарей путем перебора всех возможных последовательностей, может быть полезен для:
- Подбора паролей.
- Проверки доменов
- Генерации имен
Для оптимизации памяти, по хорошему, нужно использовать yield.
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; namespace NameGen { class Program { static string alpha = "abcdefghijklmnopqrstuvwxyz"; static string num = "0123456789"; static void Main(string[] args) { var output = @"C:\__autoSeo_results\names"; File.Delete(output); List<string> elements = Generate(alpha); File.WriteAllLines(output, elements); } static List<string> Generate(string chars, int len = 3) { int size = (int) Math.Pow(chars.Length, len); List<string> elements = new List<string>(size); int[] counters = new int[len]; do { elements.Add(new string(counters.Select(x=>chars[x]).ToArray())); counters[0]++; for (int i = 0; i < len; i++) { if (counters[i] == chars.Length) { if (i + 1 == len) return elements; counters[i + 1]++; counters[i] = 0; } } } while (true); } } }
Метки:C#, разработка
Похожие статьи
- 31 августа 2009 -- CRUD на SQLite (5)
- 18 декабря 2008 -- Транслитерация RUS 2 LAT на C# (22)
- 15 сентября 2011 -- Еще раз о работе со службами (Windows Service) на C# (0)
- 21 декабря 2010 -- Неравенства вещественных чисел. (0)
- 15 сентября 2011 -- C#: Запуск Windows сервисов как консольных приложений (5)
2 марта, 2012 at 12:17
Зачем объявлена переменная num, если она не используется?
4 марта, 2012 at 15:26
Зато её можно передать в метод как параметр :p
12 марта, 2012 at 16:43
Да, с использованием yield return программа станет немного проще.
using System;
using System.Collections.Generic;
using System.Text;
namespace DictGenerator
{
class Program
{
public static IEnumerable EnumLetter(string alphabet)
{
foreach (char a in alphabet)
yield return "" + a;
}
public static IEnumerable EnumWord(IEnumerable child, string alphabet)
{
foreach (string a in child)
foreach (string b in EnumLetter(alphabet))
yield return "" + a + b;
}
static void Main(string[] args)
{
const string alphabet = "abcdefghijklmnopqrstuvwxyz";
int length = 5;
IEnumerable list = EnumLetter(alphabet);
for (int i = 0; i < length - 1; i++)
list = EnumWord(list, alphabet);
foreach (string a in list)
{
Console.WriteLine(a);
}
}
}
}
16 февраля, 2013 at 2:25
Соль, использованную для каждого пароля мы храним рядом с полученным хешем, например, в отдельном столбце таблицы паролей. Когда нам необходимо проверить пароль пользователя — мы извлекаем соль, соединяем с введенным паролем и находим от этой строки MD5. Если пароль верный — хеш совпадет с тем, который хранится в базе.