Я выполняю проект грубой силы в качестве школьного задания, и мне нужно получить пользовательский ввод (пароль) с максимальной длиной 12 символов и взломать его.Каждый ввод длиной 4 символа или менее проходит безупречно.Однако, что-нибудь более длинное, и приложение зависает и по какой-то странной причине останавливает цикл, а также предотвращает любое дальнейшее взаимодействие с пользовательским интерфейсом.
Я подумал, что, возможно, добавлю метку в форму и каждый раз меняю ее текст.время запуска цикла взлома решит проблему.Но потом я понял, что, поскольку все работает через основную форму, это не решение.
Вот функция, которая взламывает ввод пользователя:
private void startbtn_Click(object sender, EventArgs e)
{
okay = true;
charstring = "";
vpasswort = " " + passwordtb.Text.ToString();
passwort = vpasswort.Substring(vpasswort.Length - 12);
var time = new System.Diagnostics.Stopwatch();
time.Start();
do
{
int ende = letters.Length - 1;
for(int hmi = 0; hmi <= ende; hmi++)
{
//MessageBox.Show(charstring);
for (int zmi = 0; zmi <= ende; zmi++)
{
//MessageBox.Show(charstring);
for (int mi = 0; mi <= ende; mi++)
{
//MessageBox.Show(charstring);
for (int hm = 0; hm <= ende; hm++)
{
//MessageBox.Show(charstring);
for (int zm = 0; zm <= ende; zm++)
{
//MessageBox.Show(charstring);
for (int m = 0; m <= ende; m++)
{
//MessageBox.Show(charstring);
for (int ht = 0; ht <= ende; ht++)
{
//MessageBox.Show(charstring);
for (int zt = 0; zt <= ende; zt++)
{
//MessageBox.Show(charstring);
for (int t = 0; t <= ende; t++)
{
//MessageBox.Show(charstring);
for (int h = 0; h <= ende; h++)
{
//MessageBox.Show(charstring);
for (int z = 0; z <= ende; z++)
{
//MessageBox.Show(charstring);
for (int E = 0; E <= ende; E++)
{
charstring = letters[hmi] + letters[zmi] + letters[mi] + letters[hm] + letters[zm] +
letters[m] + letters[ht] + letters[zt] + letters[t] + letters[h] + letters[z] +
letters[E];
Console.WriteLine(charstring);
if(charstring == passwort)
{
okay = false;
time.Stop();
goto pizza;
}
//MessageBox.Show(charstring);
}//E
}//z
}//h
}//t
}//zt
}//ht
}//m
}//zm
}//hm
}//mi
}//zmi
}//hmi
} while (okay == true);
pizza:
MessageBox.Show("Your password was hacked!");
result.Text = charstring;
stopwatch.Text = time.ElapsedMilliseconds.ToString() + " ms";
}
//tried to change something in the form but didn't work
private void timer1_Tick(object sender, EventArgs e)
{
result.Text = charstring;
}
И вот основныевопрос.Можно ли, скажем, приостановить цикл на одну или две миллисекунды, чтобы предотвратить зависание и / или сбой приложения?Я почти уверен, что есть способ, и он действительно прост, и что у меня просто есть эта проблема, потому что я новичок в C # и программировании в целом.
РЕДАКТИРОВАТЬ: Я думаю, что яЯ должен найти способ заставить весь процесс взлома идти в фоновом режиме.Но, опять же, понятия не имею, как xD
Заранее спасибо за любую помощь!