>> ROB BOWDEN: Ek is Rob, en Kom ons kry krake.
So onthou van die pset spec wat ons gaan word benodig om die gebruik
grafkelder funksie.
Vir die man page, het ons twee hash definieer _xopensource.
Moenie bekommerd wees oor hoekom ons nodig het om dit te doen.
En ook hash sluit unistd.h.
>> So een keer is dit uit die pad, laat kry om die werklike program.
Eerste ding wat ons moet doen, is om seker te maak die gebruiker het 'n geldige geïnkripteer
wagwoord op die command line.
Onthou dat die program is veronderstel om te loop soos dot streep kraak, en
dan geïnkripteer string.
>> So hier is ons nagaan om seker te maak dat argc tot twee as ons wil
voortgaan met die program.
As argc is nie twee nie, wat beteken dat óf die gebruiker het nie 'n geïnkripteer
wagwoord op die command line, of hulle het meer as net die geïnkripteer
wagwoord op die command line, waarin geval ons weet nie wat om te doen met die
command line argumente.
>> So as argc was twee, kan ons voortgaan.
En hier, ons gaan om te verklaar 'n veranderlike geïnkripteer.
Dit is net gaan om te alias die oorspronklike argv1 sodat in hierdie
program, het ons nie om te noem dit argv1, wat dan moet jy dink
oor wat dit eintlik bedoel.
>> So uiteindelik, ons wil hê dat te bekragtig die geënkripteerde wagwoord van die gebruiker
het eintlik kon gewees het 'n geïnkripteer wagwoord.
Per die man bladsy van die grafkelder, die geënkripteerde wagwoord moet wees 13
karakters lank wees.
Hier, sien dat ons hash gedefinieer enkripteer lengte as 13.
So ons is maar net om seker te maak dat die string lengte van die geïnkripteer
wagwoord is 13.
>> En as dit is nie, ons wil die program te verlaat.
So een keer dit is uit die weg geruim is, kan ons nou eintlik probeer om uit te vind wat die
wagwoord wat het die encrypted wagwoord was.
Hier wil ons die sout te gryp van die geïnkripteer wagwoord.
Onthou, volgens die man bladsy, dat die eerste twee karakters van 'n geïnkripteer
string, soos hier -
50ZPJ en so aan -
die eerste twee karakters gee ons die sout wat gebruik is om
in die grafkelder funksie.
>> En hier, sien ons dat die sout ha.
So wil ons die eerste twee te kopieer karakters, sout lengte om hash
gedefinieer as twee.
Ons het die eerste twee karakters te kopieer in hierdie reeks, sout.
Let daarop dat ons moet sout lengte plus een aangesien ons nog steeds 'n nul
Terminator aan die einde van ons sout.
>> Daarna het ons gaan hierdie skikking te verklaar, gas, die grootte maksimum lengte plus
een, waar maksimum lengte is hash gedefinieer as agt, aangesien die maksimum wagwoord
is agt karakters lank wees.
En ons gaan om dit te gebruik om te Itereer oor alle moontlike snare wat kon
geldig wees wagwoorde.
So as die geldige karakters in 'n wagwoord was net 'n, b, en c, dan
sou ons Itereer oor 'n, b, c, aa, ba, ca, en so aan, totdat
ons kry om te sien cccccccc -
agt c's.
>> En as ons nie af van 'n geldige wagwoord, dan het ons nodig om te sê dat die
geënkripteerde string was nie geldig te begin.
So nou het ons bereik dit terwyl 1 lus.
Let daarop dat beteken dit is 'n oneindige lus.
>> Let daarop dat daar is geen pouse verklaring binnekant van hierdie oneindige lus.
Daar terugkeer net state.
So het ons nog nooit eintlik verwag die lus om af te sluit.
Ons het net verwag dat die program te verlaat.
Ek het bygevoeg die gedrukte verklaring aan die top van hierdie lus om net te druk
wat ons huidige raaiskoot op wat die wagwoord is.
>> Nou, is wat hierdie lus doen?
Dit is herhaling oor alle moontlike snare wat geldig wagwoorde.
Die eerste ding wat ons gaan doen, is om neem ons huidige raaiskoot vir wat die
wagwoord is.
Ons sal die sout wat ons gegryp uit die geënkripteerde string, en ons is
gaan die raai te enkripteer.
Dit gee ons 'n geïnkripteer raaiskoot, wat ons gaan om teen te vergelyk
die geënkripteerde string wat die gebruiker wat by die command line.
>> As hulle dieselfde is, in welke geval string vergelykbaar sal terugkeer nul, indien
hulle is dieselfde, dan raai was die wagwoord wat gegenereer die geënkripteerde
string, in welke geval ons kan druk dat as ons vergeet en terugkeer.
Maar as hulle nie dieselfde nie, wat beteken dat ons raaiskoot was verkeerd.
>> En ons wil Itereer te die volgende geldige raaiskoot.
So dit is wat dit terwyl lus is probeer om te doen.
Dit gaan ons raaiskoot te Itereer na die volgende geldige raaiskoot.
Let daarop dat wanneer ons sê dat 'n spesifieke karakter in ons raaiskoot het
bereik die maksimum simbool, wat hier is hash gedefinieer as 'n tilde, aangesien
dit is die grootste ASCII waarde karakter dat 'n gebruiker kan inskryf by die
klawerbord, wanneer die karakter bereik die Max simbool, dan wil ons te stuur
dit terug na die minimum simbool, wat is 'n ruimte, weer die laagste ASCII
waarde simbool wat 'n gebruiker kan tree op die sleutelbord.
>> So ons gaan dit op te stel aan die minimum-simbool.
En dan moet ons gaan om te gaan op na die volgende karakter.
So, hoe is ons raai gaan Itereer?
Wel, as die geldige karakters is 'n, b, en c, dan as ons begin met 'n,
dit sal Itereer te b, dit sal Itereer tot c.
c is ons Max simbool, so ons sal stel c terug na 'n, die minimum simbool.
En dan sal ons Itereer indeks na die volgende karakter.
>> So as die oorspronklike raaiskoot was c, is die volgende karakter gaan die nul wees
Terminator.
Hier, agterkom dat as die karakter dat ons nou wil
verhoging was die nul terminator, dan moet ons gaan om dit in te stel na die
minimum simbool.
So as die raaiskoot was c, dan is ons nuwe raaiskoot gaan wees aa.
En as ons oorspronklike raaiskoot was CCCC, dan is ons nuwe raaiskoot
gaan wees aaaaa.
>> So wanneer ons die maksimum string van 'n gegewe lengte, dan is ons
gaan implementeer om die minimum string van die volgende lengte, wat sal
net al die karakters van die minimum-simbool.
Nou, is wat hierdie tjek hier?
Wel, as indeks verskuif van die agtste karakter van die nege karakter -
sodat ons voeg agt c se as ons vorige raai -
dan indeks gaan om te fokus op die laaste nul terminator van ons raaiskoot
skikking, wat nie bedoel is om werklik gebruik word in ons wagwoord.
>> So as ons is gefokus op die laaste null Terminator, dan het ons nog nie gevind nie 'n
wagwoord wat is geldig net agt gebruik karakters, wat beteken dat daar geen
geldige wagwoord wat versleutelt die gegewe string.
En ons het wat om te druk, sê Ons kan nie 'n geldige
wagwoord en terugkeer.
So dit terwyl lus gaan Itereer oor alle moontlike snare.
>> As dit bevind dat enige versleutelt die verwag geënkripteerde string, dit sal
terug te keer dat die wagwoord.
En dit nie kry nie, dan dit sal terugkeer, druk dat dit
was nie in staat om iets te vind.
Nou, sien dat iterating oor die hele moontlik snare is waarskynlik gaan om te
'n rukkie neem.
Kom ons eintlik sien hoe lank dat neem.
>> Kom ons maak kraak.
Wel, oops - dit sê undefined verwysing na grafkelder.
So onthou, vir die p stel spec en ook die man-bladsy vir grafkelder dat ons
nodig het om te skakel in grafkelder.
Nou, is die verstek maak opdrag weet nie dat jy
wil hê dat die funksie te gebruik.
>> So laat kopieer hierdie kliënt opdrag en voeg net aan die einde
daarvan, skakel grafkelder.
Nou, dit stel.
So laat loop crack op 'n gegewe geënkripteerde string -
so keiser s'n.
So dit was redelik vinnig.
>> Let daarop dat hierdie geëindig op 13.
Wel, Caesar se geënkripteerde wagwoord gebeur om te wees 13.
So laat ons probeer om 'n ander wagwoord.
Kom ons neem Hirschhorn se encrypted wagwoord en probeer kraak dit.
>> So sien ons reeds bereik het drie karakters.
En ons iterating oor alle moontlike drie-karakter snare.
Dit beteken dat ons reeds voltooi iterating oor alle moontlike een-en-
twee karakter snare.
Nou, dit lyk asof dit gaan 'n rukkie neem voor ons by die
Vier-karakter snare.
Dit mag dalk 'n paar minute.
>> Dit het nie 'n paar minute.
Ons is op die vier-karakter snare.
Maar nou het ons nodig het om te Itereer oor die hele moontlik vier-karakter snare, wat
wat kan miskien neem 10 minute.
En dan wanneer ons by vyf karakter snare, ons moet Itereer oor die hele
van diegene wat moontlik neem 'n paar uur.
En ons moet Itereer oor alle moontlike ses-karakter snare, wat
kon neem 'n paar dae en so aan.
>> So dit kan 'n potensieel baie lang tyd om te Itereer oor alle moontlike
agt-karakter en minder snare.
So sien dat dit nie noodwendig 'n baie doeltreffende algoritme vir die vind van
'n wagwoord.
Jy mag dalk dink dat daar is beter maniere.
Byvoorbeeld, die wagwoord zyx! 32AB is waarskynlik nie 'n baie algemene wagwoord
terwyl die wagwoord 12345 waarskynlik 'n baie meer algemeen.
>> So 'n manier om te probeer om 'n wagwoord te vind vinniger is om net te kyk
by wagwoorde wat meer algemeen is.
So byvoorbeeld, kan ons probeer om woorde te lees van 'n woordeboek en probeer al
daardie woorde as ons wagwoord raai.
Nou, miskien 'n wagwoord is nie so eenvoudig nie.
Dalk is dit die gebruiker was ietwat slim en probeer om die aanbring van 'n aantal te
die einde van 'n woord.
>> So miskien is die wagwoord was password1.
So jy kan probeer iterating oor al die woorde in die woordeboek met 'n een
aangeheg aan die einde van dit.
En dan miskien na te doen, sal jy voeg 'n twee tot die einde van dit.
>> Of miskien die gebruiker probeer om selfs meer slim, en hulle wil hulle
wagwoord te wees "hacker", maar hulle is gaan alle gevalle van e's te vervang
met drieë.
So jy kan doen dit ook.
Itereer oor al die woorde in die woordeboek maar vervang karakters wat
lyk soos getalle met dié nommers.
>> So op hierdie manier, kan jy vang selfs meer wagwoorde wat redelik algemeen.
Maar in die einde, die enigste manier wat jy kan vang al die wagwoorde is om brute
dwing Itereer oor die hele moontlik snare.
So op die ou end, het jy nodig om Itereer oor al die snare van die een karakter
agt karakters, wat dalk 'n n baie lang tyd, maar jy moet om dit te doen.
>> My naam is Rob Bowden.
En dit is kraak.