Brute_Force Algorithmus
-
helo Volkard
Der aufruf bei deiner funktion war natürlich sizeof(chartable) und nicht strlen(chartable), so wie ich geschrieben habe.
Dass machts ja aus !...lowbyte
-
lowbyte_ schrieb:
meine Zeilen unterscheiden sich zu deinen nur ...
for(f=1;(f<=slen);f++) { BFP(pw,pw,chartable,strlen(chartable),f-1); }
supi. mein code war nur als skizze gedacht, um dich in die richtung rekursion zu lenken. und klar mußt du mit so einer schliefe in die tiefe gehen, damit du zuerst die kurzen und später erst die langen machst.
lowbyte_ schrieb:
Jetz werde ich mal eine Version mit Threads erarbeiten.. und dan mal Posten ..dan bist du gefragt Volkard
feinschliff oder ergänzung.
feinschliff werd ich kaum machen. ich konnte nur nicht widerstehen, weil dein code echt scheiße war.
-
volkard@work schrieb:
...um dich in die richtung rekursion zu lenken.
http://stanford.edu/~blp/writings/clc/recursion-vs-iteration.html
-
helo vol.
Ja das ist mir auch klar..obwol mein alter code. 100000 chars pro sek. Schneller war.. Denke das ist wegen den stack frames die immer erzeugt werden müssen für die var.s und rücksprung adresse.etc. Oder lieg ich da falsch?
Aber klar das es so wie jetz 100 x besser ist.Lowbyte
-
für diesen zweck ist doch wohl eher die schnellere methode die bessere. was spricht denn gegen 15 bis 30 for-schleifen?
-
Also ich meinte natürlich bei meinem alten code mit 15 for schleifen.. der war schneller...Bei einer rekursiven Implementierung muss bei jedem Funktions aufruf immer der Stackframe erzeugt.. + alles gepusht werden..nach meinem wissen.
lowbyte
-
waaaaas? schrieb:
für diesen zweck ist doch wohl eher die schnellere methode die bessere. was spricht denn gegen 15 bis 30 for-schleifen?
nichts. aber manche glauben, dass schöner code wichtiger ist, als geschwindigkeit usw.
-
helo
Da ich mit der Rekursiven Version nicht so zufrieden war wegen der Geschwindikeit .. schrieb ich meinen alten Code um..
Mehr Geschwindikeit durch weniger Funktionsaufrufe ..
Diese Version ist mit einem Thread pro breite Implem. ,doch das werde ich noch ändern.unsigned char chartable[]={"ABCDEFGHIJKLMNOPQRSTUVWXYZ "}; int main(){ .. ... for(f=0;(f<slen);f++) { ThreadH[f] = CreateThread(NULL ,0 ,&THREAD ,(LPVOID) (f+1) ,0 ,&ThreadID[f]); } } DWORD WINAPI THREAD(r) { BF_(r); ExitThread(0); } int BF_(int width) { int r[15]={0}; register int i ,f ,d; register int p=0; for(r[0]=0;(r[0]<stab);r[0]++) { for(r[1]=0;(r[1]<stab);r[1]++) { for(r[2]=0;(r[2]<stab);r[2]++) { for(r[3]=0;(r[3]<stab);r[3]++) { for(r[4]=0;(r[4]<stab);r[4]++) { for(r[5]=0;(r[5]<stab);r[5]++) { for(r[6]=0;(r[6]<stab);r[6]++) { for(r[7]=0;(r[7]<stab);r[7]++) { for(r[8]=0;(r[8]<stab);r[8]++) { for(r[9]=0;(r[9]<stab);r[9]++) { for(r[10]=0;(r[10]<stab);r[10]++) { for(r[11]=0;(r[11]<stab);r[11]++) { for(r[12]=0;(r[12]<stab);r[12]++) { for(r[13]=0;(r[13]<stab);r[13]++) { for(r[14]=0;(r[14]<stab);r[14]++) { for(f=0,d=14;(f<width);f++ ,d--){ tmpbuf[width-1][f] = chartable[r[d]]; } tmpbuf[width-1][f]='\0'; (*HASH[modflag])(width-1); if( ! memcmp(&hash_buf[0] ,&digesthex[width-1][0],SIZEH) ) { _sleep(501); TerminateThread(HStat,1); printf("\n\nCracked Hash :%s - Password :%s\n\n" ,&output_hash[0] , &tmpbuf[width-1][0] ); for(i=0;i<15;i++) { if(i!=(width-1)){ TerminateThread(ThreadH[i],0); } } return 0; } count++; } if(width==1) return 0; } if(width==2) return 0; } if(width==3) return 0; } if(width==4) return 0; } if(width==5) return 0; } if(width==6) return 0; } if(width==7) return 0; } if(width==8) return 0; } if(width==9) return 0; } if(width==10) return 0; } if(width==11) return 0; } if(width==12) return 0; } if(width==13) return 0; } if(width==14) return 0; } return 0; }
lowbyte