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 ;)



@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


Husk det er en hashværdi, flere værdier som bliver hashet kan varetage samme værdi, så i princippet kan han vel godt ramme den samme hashværdi med en anden streng end den originale?



@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


Husk det er en hashværdi, flere værdier som bliver hashet kan varetage samme værdi, så i princippet kan han vel godt ramme den samme hashværdi med en anden streng end den originale?

Præcis hvad jeg tænkte, dog ville det i så fald tage meeeeeeeget lang tid!



@Jakob: kan godt se hvad du mener, men som jeg skrev i første indlæg, det er kun fordi jeg har siddet og kedet mig at jeg har leget lidt med det - ved da udmærket godt at alle tegn og tal burde være med, men da det bare var lidt for sjov, har jeg valgt at holde det simpelt - også fordi at ved at medtage alle bogstaver, tegn og tal vil jeg ende med omkring 90-100 tegn i alt, hvilket for en 5 karakter lang streng til give 90^5 eller 100^5 hvilket er mellem 5.904.900.000 og 10.000.000.000 muligheder, og hvis vi antager at vi rammer rigtigt omkring halvvejs igennem vil dette på en normal hjemme computer (i mit tilfælde en bærbar) tage omkring 36-40 timer at køre igennem, så derfor valgte jeg at holde det simpelt.

Jeg laver jo selvfølgeligt selv min MD5 hash ud fra de kriterier når jeg tester også ;-)



@Jakob - bingo ;)



Du kan også lave et "message pump".

Grunden til at programmet fryser er fordi dit for-loop forhindrer dit program i at kommunikere med Windows.

Hvis du ikke vil bruge multi-threading, så kan du i stedet lave et "message pump".

Fold kodeboks ind/udKode 


Skal lige siges at hastigheden på dit loop bliver nedsat væsentligt, så det er en god ide kun at lave et pump en gang imellem... Måske hvert 1000 loop, eller noget.



Nu har jeg været ved at kigge lidt på den der background worker, men der er noget jeg ikke helt forstår og kan få til at virke.

Når background workeren startes, disables "start" knappen og når den er færdig skal den så enables igen, men når jeg i slutningen af loopet forsøger at kalde en funktion der enabler den, får jeg følgende fejl: Handling på tværs af tråde er ugyldig: Objektet 'btnStart' blev åbnet fra en anden tråd end den tråd, det blev oprettet i.

Det er noget med cross-thread calls, men forstår bare ikke helt hvad det betyder, og hvad jeg skal gøre for at undgå det?



Du skal benytte delegates når du forsøger at få adgang til et objekt der er oprettet i en anden tråd.

Fold kodeboks ind/udKode 




<< < 12 > >>
t