C# počet cyklů podle vstupu – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

C# počet cyklů podle vstupu – .NET – Fórum – Programujte.comC# počet cyklů podle vstupu – .NET – Fórum – Programujte.com

 

jadus
~ Anonymní uživatel
36 příspěvků
31. 10. 2010   #1
-
0
-

zdravim, píšu si z nudy program na lámáno hesel, tady kód



static void Main(string[] args)
{
string[] poe = {"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","ž"};
string[] poe2 = new string[10];
Console.Read();
for (int c1 = 0; c1 < poe.Length; c1++)
{
poe2[0]=poe[c1];
for (int c2 = 0; c2 < poe.Length; c2++)
{
poe2[1] = poe2[0] + poe[c2];
for (int c3 = 0; c3 < poe.Length; c3++)
{
poe2[2] = poe2[1] + poe[c3];
for (int c7 = 0; c7 < poe.Length; c7++)
{
poe2[3] = poe2[2] + poe[c7];
for (int c4 = 0; c4 < poe.Length; c4++)
{
poe2[4] = poe2[3] + poe[c4];
for (int c5 = 0; c5 < poe.Length; c5++)
{
poe2[5] = poe2[4] + poe[c5];
for (int c6 = 0; c6 < poe.Length; c6++)
{
Console.WriteLine(poe2[5] + poe[c6]);
if (hash(Convert.ToString(poe2[5] + poe[c6])).ToString() == "C965AE220DD94256823ABF7AA4ECA000")
{
MessageBox.Show("Tadá");
}
}
}
}
}
}

}


}
}


stylistiku neřešte, Problém tkví v tom, že já potřebuju aby se mi podle vstupu z Console.Write();, kdy se zadává délka hesla, aby se podle toho čísla co se zadá, určil i ten počer forcyklů. Nechce se mi pro každou délku až do 14 delat speciál metoda. Nevíte jak by to mohlo jít?

Nahlásit jako SPAM
IP: 88.103.38.–
liborb
~ Redaktor
+18
Guru
1. 11. 2010   #2
-
0
-

Problém hrubé síly je v tom, že si počkáš na výsledek :), ale to není předmětem dotazu.

Předně bych nepracoval se znaky jako s řetězci, ale jako se znaky:

char[] poe = { '0', '1', '2', .....


A teď k těm cyklům řekněme, že délku hesla máme uloženou v proměnné delka. K řetězci poe2 (to nebude pole řetězců) si ještě uděláme pole celých čísel - uložené aktuální indexy - něco jako:
int[] index = new int[delka];


Nejprve je potřeba toto pole indexů (pro jistotu) vynulovat.

A dále ... celkem projdeme možností: délka pole poe na delka
Int64 celkem = (Int64)Math.Pow(poe.Length, delka);
a ten Int64 ti stejně brzo dojde :). Vždy si vytvoříme řetězec znovu. Jednotlivá písmenka dostaneme z pole poe dle uložených indexů. Ty musíme měnit, a to na stejný způsob jako se například mění číslice v číslu:
for (int c1 = 0;c1 < celkem;c1++)

{
poe2="";
for (int c2 = 0;c2 < delka;c2++) poe2 += poe[index[c2]];
System.Console.WriteLine(poe2);

for (int c3 = 0; c3 < delka; c3++)
{
if (++index[c3] >= poe.Length) index[c3] = 0;
else break;
}
}

Nahlásit jako SPAM
IP: 78.80.52.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 3 hosté

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý