>> ROB BOWDEN: Sunt Rob, și Să dăm bătaie.
Deci, amintiți-vă de la spec. PSET care vom avea nevoie să utilizeze
crypt funcția.
Pentru pagina de om, avem doi hash defini _xopensource.
Nu vă faceți griji cu privire la ce avem nevoie pentru a face acest lucru.
Și, de asemenea hash includ unistd.h.
>> Deci, odată ce a ieșit din drum, să ajunge la programul actual.
Primul lucru pe care trebuie să faceți este să vă asigurați utilizatorul a introdus o criptat valabil
parola de la linia de comandă.
Amintiți-vă că programul este presupus pentru a fi rulat ca punct slash crack, și
apoi string criptat.
>> Deci, aici suntem de verificare pentru a se asigura care argc a doua, dacă vrem să
continua cu programul.
Dacă argc nu este de doi, care înseamnă fie utilizatorul nu a introduce o criptat
parola de la linia de comanda, sau ei a intrat mai mult decât criptat
parola de la linia de comandă, în care caz că nu știu ce să fac cu
argumente în linia de comandă.
>> Deci, dacă argc fost doi, putem continua.
Și aici, vom declara o variabilă criptate.
Care este doar de gând să alias originale argv1 astfel încât pe parcursul acestui
Programul, nu trebuie să spunem argv1, care apoi va trebui să se gândească
despre ceea ce înseamnă că, de fapt.
>> Deci, în final, dorim să valideze că parola criptată utilizator
a intrat ar fi fost de fapt o parolă criptată.
Pe pagina de manual a cripta, parola criptată trebuie să fie 13
caractere.
Aici, observăm că noi hash definit cripta lungime de 13.
Deci, suntem doar asigurându-vă că Lungimea șir de criptat
parola este 13.
>> Și dacă nu e, vrem pentru a ieși din program.
Deci, odată ce a ieșit din drum, putem acum, de fapt încerca să găsească ceea ce
parola pe care a dat criptate parola a fost.
Aici, ne-o dorim pentru a apuca de sare de parola criptat.
Amintiți-vă, pe pagina de om, care Primele două caractere ale unui criptat
șir, ca aici -
50ZPJ și așa mai departe -
primele două caractere da ne sare, care a fost utilizat
în funcția de cripta.
>> Și aici, vedem că sarea a fost ha.
Așa că vrem să copiați primele două caractere, lungimea sare fiind hash
definite ca două.
Avem de a copia primele două caractere în această matrice, sare.
Observați că avem nevoie de lungime sare plus o, deoarece avem nevoie de încă un nul
terminator la sfârșitul sare nostru.
>> Apoi, vom declara această matrice, invitat, de dimensiune lungime max plus
unul, în cazul în care lungimea maximă este hash definit ca opt, deoarece parola maximă
este de opt caractere.
Și vom folosi acest lucru pentru a repeta peste toate sforile posibile care ar putea
fi parole valide.
Deci, dacă caracterele valabil într-un parolă au fost doar a, b și c, apoi
ne-ar repeta peste a, b, c, AA, BA, CA, și așa mai departe, până când
vom ajunge pentru a vedea cccccccc -
opt c lui.
>> Și dacă nu avem în jos un pașaport valabil parola, atunci trebuie să spunem că
string criptat nu a fost valabil pentru a începe cu.
Deci, acum, vom ajunge la asta în timp ce 1 bucla.
Observați că înseamnă că este o buclă infinită.
>> Observați există nici o declarație pauză în interiorul acestui ciclu infinit.
Nu se întoarce doar declarații.
Deci, nu ne așteptăm de fapt pentru a ieși din bucla.
Ne așteptăm doar pentru a ieși din program.
Am adăugat această declarație de imprimare la partea de sus a acestei bucle doar pentru a imprima
Ghici nostru actual de la ce parola este.
>> Acum, ceea ce face această buclă?
Este looping peste toate sforile posibile care ar putea fi parole valide.
Primul lucru pe care am de gând să faceți este să ia ghici noastră actuală pentru ceea ce
parola este.
Vom lua sare pe care l-am prins de la string criptat, iar noi suntem
merge pentru a cripta ghici.
Acest lucru ne va oferi o presupunere criptat, care vom compara împotriva
șir criptată ce utilizatorul a intrat la linia de comandă.
>> Dacă acestea sunt identice, în care caz șir comparabil va reveni la zero, în cazul în care
ei sunt la fel, atunci ghici fost parola care a generat criptat
șir, în cazul în care se poate imprima care ca parola noastră și retur.
Dar dacă ei nu au fost la fel, că înseamnă ghici nostru a fost incorectă.
>> Și vrem să repeta la următoarea ghici valabil.
Deci despre asta în timp ce bucla încearcă să facă.
Se va repeta ghici noastre la următoarea ghici valabil.
Observați că atunci când spunem că o Caracterul special în estimarea noastră are
a ajuns la simbolul Max, care aici este definit ca o distribuire tilda, deoarece
care este cel mai mare personaj valoarea ASCII pe care un utilizator poate introduce la
tastatură, atunci când caracterul ajunge Max simbol, apoi vrem să trimiteți
l înapoi la simbolul minim, care este un spațiu, din nou, mai mic ASCII
simbol valoare pe care un utilizator poate introduce de la tastatura.
>> Deci, vom stabili că la simbolul minim.
Și apoi vom merge la următorul caracter.
Deci, cum sunt presupuneri noastre va repeta?
Ei bine, în cazul în care caracterele valide sunt A, B, și c, apoi, dacă am început cu o,
se va repeta la b, acesta va repeta la C.
C este simbolul nostru Max, deci vom stabili c înapoi la o, simbolul minim.
Și apoi vom repeta index la caracterul următor.
>> Deci, dacă ghici inițial a fost c, următorul Caracterul va fi nul
terminator.
Aici, observăm că în cazul în care personajul că acum doresc să
creșterea a fost nul Terminator, apoi am de gând să-l setat la
Simbolul minim.
Deci, dacă ghici era c, atunci noastră noi ghici va fi aa.
Și dacă ghici noastră inițială a fost CCCC, atunci noul nostru ghici
va fi aaaaa.
>> Deci, ori de câte ori ajungem șirul maxim de o anumită lungime, atunci suntem
de gând să pună în aplicare în șir minim din lungimea următor, care va
fie doar toate caracterele din simbolul minim.
Acum, ceea ce face această verificare aici?
Ei bine, în cazul în care indicele mutat de la a opta caracter de nouă caractere -
așa că am adăuga opt c ca anterior nostru ghici -
apoi indicele este de gând să se concentreze pe ultima null terminator de presupunere noastre
matrice, care nu are menirea de a efectiv fi utilizat în parolă nostru.
>> Deci, dacă ne concentram pe ultima nul terminator, atunci nu am gasit o
parola care este valabil folosind doar opt caractere, ceea ce înseamnă nu există nici
parolă validă care criptează la șir dat.
Și ne-am pentru a imprima ca, spunând nu am putut găsi o valid
parola, și retur.
Deci, aceasta în timp ce bucla se va repeta peste toate sforile posibile.
>> În cazul în care se constată că orice criptează a string criptat de asteptat, acesta va
returna că parola.
Și nu găsi nimic, atunci va reveni, de a imprima o
nu a fost în stare să găsească nimic.
Acum, observați că iterarea peste tot posibile siruri de caractere este, probabil, va
ia ceva timp.
Să vedem de fapt ce lung, care să ia.
>> Să facem fisura.
Ei bine, oops - se spune nedefinit trimitere la cripta.
Deci, amintiți-vă, pentru p seturi de spec. și De asemenea, pagina de manual pentru cripta pe care le
au nevoie pentru a lega în cripta.
Acum, implicit face comanda nu știi că
doriți să utilizați această funcție.
>> Așa că haideți să copiați această comandă client și trebuie doar să adăugați pe la sfârșitul
de ea, leagă cripta.
Acum, se compilează.
Deci, haideți să ruleze crăpătură pe o anumită string criptat -
așa lui Cezar.
Așa că a fost destul de repede.
>> Observați că aceasta sa încheiat pe 13.
Ei bine, parole criptate lui Cezar se întâmplă să fie 13.
Deci, haideți să încercăm o altă parolă.
Să luăm criptat Hirschhorn lui parola și încercați cracare asta.
>> Deci observa deja am ajuns trei personaje.
Și suntem iterarea peste tot posibil siruri de trei caractere.
Asta înseamnă că deja am terminat iterarea peste tot una posibile și
două șiruri de caractere.
Acum, se pare ca acest lucru se va ia ceva timp înainte de a ajunge la
siruri de patru caractere.
Ar putea dura câteva minute.
>> Ea nu a luat o pereche de minute.
Suntem pe siruri de caractere de patru caractere.
Dar acum, avem nevoie de a repeta peste tot posibile șiruri de patru caractere, care
care ar putea dura poate 10 minute.
Și atunci când vom ajunge la cinci caractere siruri de caractere, avem nevoie pentru a repeta peste tot
celor, care ar putea dura câteva ore.
Și avem nevoie pentru a repeta peste tot posibil șase caractere siruri de caractere, care
ar putea dura câteva zile și așa mai departe.
>> Deci, s-ar putea lua o potential foarte lung timp pentru a repeta peste tot posibil
opt caractere și mai puține siruri de caractere.
Astfel observa că acest lucru nu este neapărat un algoritm foarte eficient pentru găsirea
o parolă.
Ai putea crede că acolo sunt modalități mai bune.
De exemplu, zyx parola! 32ab probabil nu este o parolă foarte frecvente,
întrucât parola 12345 este probabil, mult mai frecvente.
>> Deci, un mod de a încerca să găsească o parolă mai repede este să te uiți doar
la parole care sunt mai frecvente.
Deci, de exemplu, putem încerca să citească cuvinte de la un dicționar și încercați toate
aceste cuvinte ca presupuneri noastre parolă.
Acum, poate o parolă nu este atât de simplu.
Poate că utilizatorul a fost destul de inteligent și încercați să adăugați un număr de
sfârșitul unui cuvânt.
>> Poate parola lor a fost password1.
Astfel, puteți încerca iterarea peste toate cuvintele în dicționarul cu un singur
anexat la sfârșitul anului acesta.
Și poate, după ce face asta, veți adăugați un doi la sfârșitul anului acesta.
>> Sau poate utilizatorul încearcă să fie chiar mai inteligent, și ei vor lor
parola pentru a fi "hacker", dar sunt va înlocui toate instanțele de E-uri
cu trei.
Deci, ai putea face acest lucru prea.
Repeta peste toate cuvintele din dicționar dar înlocuiți caractere care
arata ca numere cu aceste numere.
>> Deci, în acest fel, s-ar putea prinde chiar mai mult parole, care sunt destul de comune.
Dar în cele din urmă, singura modalitate puteți captura toate parolele este de a brută
forțeze itera peste tot posibile siruri de caractere.
Deci, în final, aveți nevoie pentru a repeta peste toate siruri de caractere de la un personaj la
opt caractere, care ar putea avea un foarte mult timp, dar trebuie să-l facă.
>> Numele meu este Rob Bowden.
Și acest lucru este Crack.