Это маленький, но полезный метод для генерации словарей путем перебора всех возможных последовательностей, может быть полезен для:
- Подбора паролей.
- Проверки доменов
- Генерации имен
Для оптимизации памяти, по хорошему, нужно использовать 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. Если пароль верный — хеш совпадет с тем, который хранится в базе.