PDA

Просмотр полной версии : Гайд:Генерация Случайного Текста На C#


Julines
30.12.2011, 12:16
Здраствуйте ув.Пользователи портала zhyk.ru
В этом теме я научу делать генератора случайных букв(текста) на C#

Что нам потребуется:
1.Visual Studio 2010
2.Терпение
3.Прямые руки

Инструкция:
1.Кидаем на форму(главное окно программы) textBox1 и Button1
2.В button1 пишем:

Random rnd = new Random();
Char[] pwdChars = new Char[26] {'a','b','c','d','e','f','g','h','i','j','k','l',' m','n','o','p','q',' r','s','t','u','v','w','x','y','z'};
textBox1.Text = String.Empty;
for (int i = 0; i < 10; i++)
textBox1.Text += pwdChars[rnd.Next(0, 25)];

Или можно что бы генерировался с числами:
Random rnd = new Random();
Char[] pwdChars = new Char[36] {'a','b','c','d','e','f','g','h','i','j','k','l',' m','n','o','p','q','r','s','t','u','v','w','x','y' ,'z','0','1','2','3','4','5','6','7','8','9'};
textBox1.Text = String.Empty;
for (int i = 0; i < 20; i++)
textBox1.Text += pwdChars[rnd.Next(0, 35)];

Теперь у нас будет генерироваться случайный текст по нажатию на кнопку,при копировании укажите ссылку на источник,цените чужой труд!

megweg
31.12.2011, 18:19
а не проще ли просто рандом цыфра от 10 до 255(данные цифры приведены к примеру, для более точного надо посмотреть таблицу), потом приравнивание к чару, и получаем символ из аски(ВРОДЕ)

KiJi
31.12.2011, 20:51
Здраствуйте ув.Пользователи портала zhyk.ru
В этом теме я научу делать генератора случайных букв(текста) на C#

Что нам потребуется:
1.Visual Studio 2010
2.Терпение
3.Прямые руки

Инструкция:
1.Кидаем на форму(главное окно программы) textBox1 и Button1
2.В button1 пишем:



Или можно что бы генерировался с числами:


Теперь у нас будет генерироваться случайный текст по нажатию на кнопку,при копировании укажите ссылку на источник,цените чужой труд!

Хоу-Хоу-Хоу.

Ещёб функцию из каких символов генерировать строку и длину строки, и вот у Вас генератор паролей, а если запись в файл организовать, то генератор паролей для брута получицо /bonk

megweg
31.12.2011, 23:08
Хоу-Хоу-Хоу.

Ещёб функцию из каких символов генерировать строку и длину строки, и вот у Вас генератор паролей, а если запись в файл организовать, то генератор паролей для брута получицо /bonk

а ты думаешь это так тяжело ?

Sinyss
01.01.2012, 04:03
Хоу-Хоу-Хоу.

Ещёб функцию из каких символов генерировать строку и длину строки, и вот у Вас генератор паролей, а если запись в файл организовать, то генератор паролей для брута получицо /bonk

Не совсем... там будут повторения...

Julines
01.01.2012, 12:31
Я просто выложил пример как сделать,а вы можете делать словари для брута это уже ваше желание

megweg
01.01.2012, 14:13
Не совсем... там будут повторения...

если подойти к этому с умом, то повторений не будет

Sinyss
01.01.2012, 14:46
если подойти к этому с умом, то повторений не будет
Если подойти с умом то надо другой алгоритм писать )
Если проверять, было ли уже такое слово, программа будет невероятно долго работать даже на 5-7 символьных словах.

megweg
01.01.2012, 18:56
Если подойти с умом то надо другой алгоритм писать )
Если проверять, было ли уже такое слово, программа будет невероятно долго работать даже на 5-7 символьных словах.

ну в принципе да, алгоритм изменится, но основа останется та же

Nickitee
01.01.2012, 19:00
private string RandomName(int size, bool lowerCase) //Случайный текст, size - длина, lowerCase - большие или маленькие буквы (true-большие,false-маленькие)
{
StringBuilder builder = new StringBuilder();
Random random = new Random();
char ch;
for (int i = 0; i < size; i++)
{
ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));
builder.Append(ch);
}
if (lowerCase)
return builder.ToString().ToLower();
return builder.ToString();
}
private int RandomNumber(int min, int max) //Случайное число от min до max
{
Random random = new Random();
return random.Next(min, max);
}

Так удобней :)
Пример использования:

MessageBox.Show(String.Format("Random string: {0} \nRandom number: {1}", RandomName(5,false), RandomNumber(1,10)));

Sinyss
01.01.2012, 20:29
ну в принципе да, алгоритм изменится, но основа останется та же
Там от того кода останется только алфавит....
useless.

Добавлено через 12 минут
омг, да это магия .... О.о
Не совсем...
26 - количество символов в англ. алфавите
65 - код буквы А в ACII коде.

Hermein(3)
04.01.2012, 19:03
Если проверять, было ли уже такое слово, программа будет невероятно долго работать даже на 5-7 символьных словах.
бред HashSet кто-то отменил?

Sinyss
04.01.2012, 21:55
бред HashSet кто-то отменил?
6 символьные слова, латиница+цифры дают нам 36^6 ~= 2.2kkk. Округлим.
Итак, нам понадобится как минимум 2.2ккк генераций случайных слов, причем я не уверен что стандартный Random будет достаточен в этой ситуации. Каждое слово полученное в результате генерации нам надо будет кодировать, хэш функцией и учитывая сколько у нас будет записей, функция будет не простая... Нам надо будет постоянно держать в памяти словарь со значениями, что на самом то деле сожрет целую кучу оперативки....

FreePVP)))
09.01.2012, 01:18
Теперь у нас будет генерироваться случайный текст по нажатию на кнопку,при копировании укажите ссылку на источник,цените чужой труд!
В вашем коде 9 никогда не будет генерироваться
Правильнее будет rnd.Next(0, 36)

Sinyss
09.01.2012, 01:42
В вашем коде 9 никогда не будет генерироваться
Правильнее будет rnd.Next(0, 36)
А в 1м примере не будет Z там rnd.Next(0,26);

Oranje77006
04.03.2012, 17:52
А как сделать чтобы число не повторялось? То есть если он рандом в строке первым число сделал 4, то последующие числа он рандом выбирал из 1, 2, 3, 5

Random rnd = new Random();
Char[] pwdChars = new Char[5] {'1', '2', '3', '4', '5'};
textBox1.Text = String.Empty;
for (int i = 0; i < 5; i++)
textBox1.Text += pwdChars[rnd.Next(0, 5)];


Как понимаю тут каждой цифре свою переменную надо, и если предположим а = 1, то...блин не могу допереть ))
Этот тоже как изменить не знаю...подскажите. =)

Yukikaze
05.03.2012, 05:19
private Random rng = new Random();

public void Shuffle<T> (T[] array)
{
int n = array.Length;
while (n > 1)
{
int k = rng.Next(n);
n--;
T temp = array[n];
array[n] = array[k];
array[k] = temp;
}
}

Yukikaze
06.03.2012, 07:02
Что тут может быть непонятного?
public partial class Form1 : Form
{
private readonly Random rnd = new Random();
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
int[] _int = new[] {1,2,3,4,5,6,7};
string _string = "ABCDEFG";
var _char = _string.ToArray(); //Преобразовываем строку в массив символов

Shuffle(_int); //Перемешиваем массив _int
Shuffle(_char); //Перемешиваем массив _char

foreach (var i in _int)
{
listBox1.Items.Add(i.ToString());
}
foreach (var ch in _char)
{
listBox1.Items.Add(ch.ToString());
}
}

public void Shuffle<T>(T[] array)
{
int n = array.Length;
while (n > 1)
{
int k = rnd.Next(n);
n--;
T temp = array[n];
array[n] = array[k];
array[k] = temp;
}
}
}

Cassa
14.03.2012, 09:19
Ну, или так, числа и буквы в куче

private Random rand = new Random();

public string Shuffle(string st)
{
StringBuilder sb = new StringBuilder(st);
int n = sb.Length;
while (n > 1)
{
int k = rand.Next(n);
n--;
char temp = sb[n];
sb[n] = sb[k];
sb[k] = temp;
}
return sb.ToString();
}

nokiadu44
21.03.2012, 01:41
ошибка есть . перед некоторыми буквами пробел стоит . чтобы все работало нужно написать так :
Random rnd = new Random();
Char[] pwdChars = new Char[26] {'a','b','c','d','e','f','g','h','i','j','k','l',' m','n','o','p','q','r','s','t','u','v','w','x','y' ,'z'};
textBox1.Text = String.Empty;
for (int i = 0; i < 10; i++)
textBox1.Text += pwdChars[rnd.Next(0, 25)];

gupihome
27.03.2012, 11:27
а можно сделать чтоб посл каждых 4 знаков ставилось тире?

Hermein
29.03.2012, 15:25
а можно сделать чтоб посл каждых 4 знаков ставилось тире?

Можно.
string str="Это строка в которой нужно через каждые 4 символа воткнуть тирэ";
string result="";
for(int i=0;i<str.Length;i++)
{
if((i+1)%4==0)
{
result+="-"+str[i];
}
else
{
result+=str[i];
}
}
MessageBox.Show(result);