每次我在gui中运行我的代码时,它都会根据输入的字符数返回值...因此,例如,如果我使用1个字符,无论哪一个字符总是返回69,如果它的2个字符始终返回4830这不是应该的...因为根据使用的字符而进行的尝试次数会有所不同。
static void Recurse(int Lenght, int Position, string BaseString, ref int Combi, ref int Characters, ref string FindPassword)
{
//Character libary
char[] Match =
{'0','1','2','3','4','5','6','7','8','9','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','A',
'B','C','D','E','F','G','H','I','J','C','L','M','N','O','P',
'Q','R','S','T','U','V','X','Y','Z','!','?',' ','*','-
','+','#','_',};
int Count = 0;
for (Count = 0; Count < Match.Length; Count++)
{
Combi++;
if (Position < Lenght - 1)
{
Recurse(Lenght, Position + 1, BaseString + Match[Count], ref Combi, ref Characters, ref FindPassword);
}
if (BaseString + Match[Count] == FindPassword)
{
}
}
}
private void button1_Click(object sender, EventArgs e)
{
this.Hide();
Main f2 = new Main();
f2.ShowDialog();
this.Show();
}
private void Txt_Password_TextChanged(object sender, EventArgs e)
{
Btn_Bruteforcer_Start.Enabled = true;
}
private void Chb_Showpassword_CheckedChanged(object sender, EventArgs e)
{
if(Chb_Showpassword.Checked)
{
Txt_Password.UseSystemPasswordChar = false;
}
else
{
Txt_Password.UseSystemPasswordChar = true;
}
}
private void Btn_Bruteforcer_Start_Click(object sender, EventArgs e)
{
string FindPassword = "";
int Combi = 0;
int Characters;
FindPassword = Txt_Password.Text;
Characters = FindPassword.Length;
Recurse(FindPassword.Length, 0, "", ref Combi, ref Characters, ref FindPassword);
Password_Tester DataDisplay = new Password_Tester(FindPassword, Combi, Characters);
DataDisplay.ShowDialog();
Console.WriteLine();
}
我希望它返回尝试过的结果。例如,input = 0将花费1次尝试而不是69次,因为它现在显示...我使它工作更早了,但是由于某种原因我无法找到问题
答案 0 :(得分:0)
您的程序有很多问题...
首先,您应该关注代码的标识。如果标识不明确,则很难调试。
因此,您始终会得到相同的输出,因为您仅使用字符数作为实参。请注意,您不会对此if语句做任何事情:
if (BaseString + Match[Count] == FindPassword)
{
}
您必须使用停止条件,因为如果可能,一个布尔标志会确认您已找到它,因此您不应再尝试了。另外,从我的角度来看,您错误地计算了组合的数量。由于您已经知道密码中的字符数,因此只有在达到该长度时才应增加组合数。同样,我不确定您是否只想计算“有效尝试”(长度相同)。关于您的问题,我将添加一个额外的参数:
static void Recurse(int Lenght, int Position, string BaseString, ref
int Combi,ref int字符,ref字符串FindPassword,ref布尔hasFoundPassword)
那你就可以做
if (BaseString + Match[Count] == FindPassword)
{
hasFoundPassword = true;
}
您只需在找不到密码的情况下尝试一下:
for (Count = 0; Count < Match.Length; Count++)
{
if(hasFoundPassword) return;