stort loop

Tags:    c#

<< < 12 > >>
Hey udviklere,

Jeg sad lige for sjov her den anden dag og lavede et C# program til at bruteforce MD5 hashes.

Programmet kører fint nok, og virker, men når det kører står det som "svarer ikke" på joblisten - dette betyder ikke at det ikke kører, for jeg får stadig mit resultat til sidst.

Måden hvorpå jeg har lavet det er med et stort for loop.

Som sagt sad jeg og kedede mig, så det er måske ikke lige det mest effektive program og der er sikkert mange bedre måder at lave det på, men jeg lavede et text felt hvor man indtaster hvor mange tegn plain tekst strengen er på (altså den der er MD5 hashet) og programmet regner derefter ud hvor mange muligheder det giver (jeg har kun udviklet det til at tjekke med de små bogstaver a-z, altså 26 bogstaver, så jeg tager 26^x hvor x er det tal man indtaster)

Jeg vil jo derfor hurtigt få et loop der skal køre igennem noget der ligner 11,8 millioner gange, hvilket jo så gør det forståeligt nok at programmet fryser.

Spørgsmålet er om der er en måde at undgå det? skal man lave et andet type loop, eller hvordan?

Ved ikke hvor meget mening noget af det jeg lige skrev gav, men det er som sagt bare et lille "projekt" fordi jeg keder mig ;)



Kig på threadding

http://msdn.microsoft.com/en-us/library/aa645740%28VS.71%29.aspx

Jeg har dog aldrig prøvet så store beregninger så jeg ved ikke hvordan det skal håndteres.



Virker lidt indviklet, men kunne måske virke ;)



Det er det bestemt også i starten, men til sidst så kommer det :)



Det er det bestemt også i starten, men til sidst så kommer det :)


Det er det som skal til. Du skal huske når du ikke bruger flertråde, så når du udfører så stor en beregning så kører din GUI stadigvæk på samme tråd og din loop kører så lang tid at din GUI fryser. En måde er at bruge Threading eller backgroundworker, som virker i samme stil som multithreading, den er bare nemmere at bruge.



Det er det bestemt også i starten, men til sidst så kommer det :)


Det er det som skal til. Du skal huske når du ikke bruger flertråde, så når du udfører så stor en beregning så kører din GUI stadigvæk på samme tråd og din loop kører så lang tid at din GUI fryser. En måde er at bruge Threading eller backgroundworker, som virker i samme stil som multithreading, den er bare nemmere at bruge.


Martin har helt ret, jeg vil klart anbefale dig backgroundworkeren. Jeg har får været udsat for det samme problem og der løste den opgaven fint :) Desuden kan du også få muligheden for at smide en "Stop" knap osv. på ved at bruge den, da den har en masse smart funktioner i sig.



Vil lige gøre opmærksom på, at der også forekommer tal i en MD5 hash..



Vil lige gøre opmærksom på, at der også forekommer tal i en MD5 hash..


Det jeg mente med bogstaver a-z er at den plain text streng man hasher kun indeholder bogstaver a-z - ved godt at MD5'en indeholdet tal også..

Hvis man indtaster en MD5 hash i feltet og skriver at der er 4 bogstaver i plain text strengen laver jeg et for loop der kører igennem 26^4 gange (456.976 gange) hvor jeg prøver mig frem med alle mulige kombinationer med bogstaverne a-z:

aaaa
aaab
aaac
aaad
.. osv

hvorefter jeg hasher den streng (MD5(aaaa)) og sammenligner med den streng man først indtastede.

Hvis disse matcher, betyder det at plain text strengen f.eks. er aaaa..

Ved ikke hvor meget mening det gav?



Jo, det er meget godt. Men en streng kan jo indeholde mange flere tegn end bare de 26 små engelske bogstaver... Hvad med de store? og hvad med tal? Og hvad med andre tegn som "=()/" osv..?



@Jakob - nu er det jo ikke meningen at det skal være en komplet løsning går jeg ud fra. Vi kunne også begynde at gå igang med alle mulige andre ting som er "i vejen" med metoden til at forsøge at bruteforce et MD5 hash på ovennævnte måde - men det er jo ikke det som der er i fokus her. Der er sat nogle forudsætninger op og programmet skal virke antaget at de forudsætninger er opfyldt. Der er jo et HAV af tegn som kunne tages med - men tages disse med, så stiger antallet af gennemløbninger jo også markant (og det er så nok kandidat til dagens underdrivelse).



@Kaare - Ja, men hvis de ikke medtages, synker sandsynligheden for en streng med en matchende MD5 hash, jo også helt vildt? Medmindre selvfølgelig man kun indtaster små bogstaver... Og sorry, mens jeg skriver dette her går det op for mig at det jo netop er det han gør... Sorry.. :P



<< < 12 > >>
t