>> Rob BOWDEN: Mimi nina Rob, na hebu kupata ngozi.
Hivyo kumbuka kutoka spec pset kwamba tunakwenda kuwa wanaohitaji kutumia
crypt kazi.
Kwa ukurasa mtu, tuna mbili hash kufafanua _xopensource.
Msiwe na wasiwasi kuhusu nini tunahitaji kufanya hivyo.
Na pia ni pamoja na hash unistd.h.
>> Hivyo mara moja kwamba ni nje ya njia, hebu kupata mpango halisi.
Jambo la kwanza tunahitaji kufanya ni kuhakikisha mtumiaji aliingia encrypted halali
password katika mstari amri.
Kumbuka kwamba mpango zinatakiwa ya kuwa na kukimbia kama dot ufa kufyeka, na
kisha encrypted kamba.
>> Hivyo hapa sisi ni kuangalia na kuhakikisha kwamba argc kwa mbili kama tunataka
kuendelea na mpango.
Kama argc si wawili, kwamba maana ya aidha mtumiaji hakuingia encrypted
password katika mstari amri, au wao aliingia zaidi kuliko tu encrypted
password katika mstari amri, ambayo kesi hatujui nini cha kufanya na
amri line mabishano.
>> Hivyo kama argc mara mbili, tunaweza kuendelea.
Na hapa, tunakwenda kutangaza encrypted kutofautiana.
Kwamba tu kwenda pak awali argv1 hivyo kwamba katika hii
mpango, hatuna kuiita argv1, ambayo kisha una kufikiri
kuhusu nini maana ya kwamba kweli.
>> Hivyo hatimaye, tunataka adhibitishe kwamba password encrypted mtumiaji
aliingia wangeweza kweli imekuwa password uliosimbwa.
Kwa kila ukurasa mtu wa crypt, password encrypted lazima 13
wahusika kwa muda mrefu.
Hadi hapa, taarifa kwamba sisi hash inavyoelezwa kusimba urefu kama 13.
Hivyo sisi ni tu ya kuhakikisha kuwa urefu wa kamba encrypted
password ni 13.
>> Na kama siyo, tunataka exit mpango.
Hivyo mara moja kwamba ni nje ya njia, tunaweza sasa kweli kujaribu kupata kile
password kwamba alitoa encrypted password mara.
Hapa, tunataka kunyakua chumvi kutoka password uliosimbwa.
Kumbuka, kwa kila ukurasa mtu, kwamba mbili za kwanza ya herufi ya encrypted
kamba, kama hapa -
50ZPJ na kadhalika -
mbili za kwanza wahusika kutoa sisi chumvi kuwa ilitumika
katika kazi crypt.
>> Na hapa, tunaona kwamba chumvi ilikuwa ha.
Hivyo tunataka nakala mbili za kwanza wahusika, chumvi urefu kuwa hash
hufafanuliwa kama mbili.
Sisi kuwa na nakala ya kwanza wahusika wawili ndani ya safu hii, chumvi.
Taarifa kwamba tunahitaji chumvi urefu pamoja mmoja, tangu bado tunahitaji null
Terminator katika mwisho wa chumvi wetu.
>> Basi sisi ni kwenda kutangaza safu hii, mgeni, ukubwa wa urefu max pamoja
moja, ambapo max urefu ni hash inavyoelezwa kama nane, tangu password upeo
ni herufi nane muda mrefu.
Na sisi ni kwenda kutumia hii iterate juu ya yote masharti inawezekana kwamba inaweza
kuwa halali nywila.
Hivyo kama wahusika halali katika password walikuwa tu b, na c, kisha
tunataka iterate juu, b, c, aa, ba, ca, na kadhalika, mpaka
tunapata kuona cccccccc -
nane c ya.
>> Na kama tuna si chini halali password, basi tunahitaji kusema kwamba
kamba encrypted haikuwa halali kwa kuanzia.
Hivyo sasa, sisi kufikia hii wakati 1 kitanzi.
Taarifa kwamba maana yake ni kitanzi usio.
>> Taarifa hakuna taarifa ya mapumziko ndani ya hii kitanzi usio.
Kuna tu kurudi kauli.
Hivyo sisi kamwe kweli kutarajia exit kitanzi.
Sisi tu wanatarajia exit mpango.
Nimekuwa aliongeza kauli hii magazeti juu ya kitanzi hii tu magazeti nje
kile wetu wa sasa nadhani katika password ni nini.
>> Sasa, ni nini kitanzi hii kufanya?
Ni looping juu ya masharti yote inawezekana ambayo inaweza kuwa halali nywila.
Jambo la kwanza tunakwenda kufanya ni kuchukua nadhani wetu wa sasa kwa nini
password ni.
Tutaweza kuchukua chumvi kwamba sisi grabbed kutoka kamba encrypted, na sisi ni
kwenda kusimba nadhani.
Hii itatupa nadhani encrypted, ambayo tunakwenda kulinganisha dhidi
kamba encrypted kwamba mtumiaji aliingia katika mstari amri.
>> Kama wao ni sawa, katika kesi ambayo kamba kulinganishwa atarudi sifuri, kama
wao ni sawa, basi nadhani ilikuwa password kwamba yanayotokana encrypted
kamba, katika kesi ambayo tunaweza magazeti kwamba kama password yetu na kurudi.
Lakini kama walikuwa si sawa, kwamba maana nadhani wetu alikuwa sahihi.
>> Na tunataka iterate kwa ijayo halali nadhani.
Hivyo kwamba ni nini hii wakati kitanzi ni kujaribu kufanya.
Ni kwenda iterate nadhani wetu na nadhani ijayo halali.
Taarifa kwamba wakati sisi kusema kwamba Hasa tabia katika dhana yetu ina
kufikiwa ishara max, ambayo hadi hapa ni hash hufafanuliwa kama tilde, tangu
hiyo ni kubwa ASCII thamani tabia kwamba mtumiaji anaweza kuingia katika
keyboard, wakati tabia fika max ishara, basi tunataka kutuma
ni nyuma na ishara chini, ambayo ni nafasi, tena ASCII chini kabisa
thamani ishara kwamba mtumiaji unaweza kuingia katika keyboard.
>> Hivyo sisi ni kwenda kuweka kwamba kwa ishara ya kiwango cha chini.
Na kisha sisi ni kwenda juu ya tabia ya pili.
Hivyo jinsi ni kubahatisha wetu kwenda iterate?
Naam, kama wahusika ni halali b,, na c, kisha kama sisi ilianza na,
hivyo itabidi iterate na b, ni itabidi iterate c.
c ni alama yetu max, hivyo tutaweza kuweka c nyuma, alama kiwango cha chini.
Na kisha tutaweza iterate index na tabia ya pili.
>> Hivyo kama dhana ya awali ilikuwa c, ijayo tabia ni kwenda kuwa null
Terminator.
Hapa chini, taarifa kwamba kama tabia kwamba sisi sasa wanataka
nyongeza alikuwa Terminator null, kisha tunakwenda kuweka kwa
kima cha chini cha mfano.
Hivyo kama nadhani alikuwa c, basi wetu Dhana mpya ni kwenda kuwa aa.
Na kama nadhani wetu awali ilikuwa CCCC, basi nadhani wetu mpya
ni kwenda kuwa aaaaa.
>> Hivyo wakati sisi kufikia kamba upeo ya urefu fulani, basi sisi ni
kwenda kutekeleza kwa kamba kima cha chini cha urefu wa pili, ambayo itakuwa
tu kuwa wahusika wote wa alama ya kiwango cha chini.
Sasa, ni nini hundi hii kufanya hapa?
Naam, kama index wakiongozwa kutoka nane tabia na tabia ya tisa -
hivyo kuongeza nane c kama uliopita wetu nadhani -
kisha index ni kwenda kuzingatia mwisho null Terminator ya nadhani wetu
safu, ambayo si maana ya kweli kutumika katika password yetu.
>> Hivyo kama sisi ni kulenga null kwamba mwisho Terminator, basi hatuna kupatikana
password kwamba ni halali kwa kutumia tu nane wahusika, ambayo ina maana hakuna
halali password kwamba encrypts kwa kamba aliyopewa.
Na sisi kuwa na magazeti kwamba, akisema sisi hakuweza kupata halali
password, na kurudi.
Hivyo hii kitanzi wakati anaenda iterate juu ya yote masharti iwezekanavyo.
>> Kama anaona yoyote encrypts kwamba inatarajiwa encrypted kamba, hivyo itabidi
kurudi kwamba password.
Na haina kupata chochote, basi atarudi, uchapishaji kwamba
hakuwa na uwezo wa kupata chochote.
Sasa, taarifa kwamba iterating juu ya wote masharti inawezekana pengine ni kwenda
kuchukua muda.
Hebu kweli kuona jinsi muda mrefu kwamba inachukua.
>> Hebu kufanya ufa.
Naam, oops - inasema kisichojulikana rejea kwa crypt.
Basi kumbuka, kwa p seti spec na pia ukurasa mtu kwa ajili ya crypt kwamba sisi
haja ya kuhusisha katika crypt.
Sasa, default kufanya amri hajui kwamba wewe
wanataka kutumia kwamba kazi.
>> Basi hebu nakala hii amri ya mteja na tu kuongeza juu ya mwisho
yake, kuunganisha crypt.
Sasa, inaandaa.
Basi hebu kukimbia ufa juu ya kupewa encrypted kamba -
hivyo Kaisari.
Hivyo kwamba alikuwa pretty kufunga.
>> Taarifa kwamba hii kumalizika tarehe 13.
Naam, Kaisari encrypted password hutokea kwa kuwa 13.
Basi hebu jaribu mwingine password.
Hebu kuchukua Hirschhorn ya encrypted password na kujaribu ngozi hiyo.
>> Hivyo taarifa tumekuwa tayari kufikiwa tatu wahusika.
Na sisi ni iterating juu ya wote inawezekana tatu-tabia masharti.
Hiyo ina maana tumekuwa tayari kumaliza iterating juu ya kila moja iwezekanavyo na
mbili tabia masharti.
Sasa, inaonekana kama hii ni ya kwenda kuchukua muda kabla sisi kufikia
minne tabia masharti.
Inaweza kuchukua dakika kadhaa.
>> Haikuchukua dakika kadhaa.
Sisi ni juu ya masharti ya nne-tabia.
Lakini sasa, tunahitaji iterate juu ya kila inawezekana minne tabia masharti, ambayo
ambayo inaweza kuchukua labda dakika 10.
Na kisha wakati sisi kufikia tano tabia masharti, tunahitaji iterate juu ya kila
ya wale, ambao huenda kuchukua masaa kadhaa.
Na tunahitaji iterate juu ya wote inawezekana sita-tabia masharti, ambayo
inaweza kuchukua siku kadhaa na kadhalika.
>> Hivyo inaweza kuchukua muda mrefu sana uwezekano wakati iterate juu ya wote inawezekana
nane tabia na masharti machache zaidi.
Hivyo taarifa kwamba hii si lazima ufanisi sana algorithm kwa ajili ya kutafuta
password.
Unaweza kufikiri kwamba kuna ni njia bora zaidi.
Kwa mfano, zyx password 32ab! pengine si password ya kawaida sana,
ambapo password ni 12345 pengine mengi zaidi ya kawaida.
>> Hivyo njia moja ya kujaribu kupata password haraka zaidi ni kuangalia tu
saa nywila ambayo ni zaidi ya kawaida.
Hivyo kwa mfano, tunaweza kujaribu kusoma maneno kutoka kamusi na kujaribu yote ya
maneno hayo kama guesses yetu password.
Sasa, labda password si rahisi.
Labda mtumiaji ilikuwa kiasi fulani wajanja na kujaribu appending idadi ya
mwisho wa neno.
>> Hivyo labda password yao ilikuwa password1.
Hivyo unaweza kujaribu iterating juu ya maneno yote katika kamusi na moja
umeongezewa na mwisho wake.
Na kisha labda baada ya kufanya hivyo, utakuwa append mbili kwa mwisho wake.
>> Au labda user ni kujaribu kuwa hata wajanja zaidi, na wanataka yao
password kuwa "hacker," lakini wao ni kwenda kuchukua nafasi ya matukio yote ya e
na watatu watatu.
Hivyo unaweza kufanya hivyo pia.
Iterate juu ya maneno yote katika kamusi lakini badala ya wahusika kuwa
kuangalia kama idadi na namba hizo.
>> Hivyo njia hii, unaweza kupata hata zaidi nywila kwamba ni pretty kawaida.
Lakini mwisho, njia pekee unaweza kukamata nywila wote ni brute
nguvu iterate juu ya wote iwezekanavyo masharti.
Hivyo katika mwisho, huna haja ya iterate juu ya yote masharti kutoka tabia moja kwa
nane wahusika, ambayo inaweza kuchukua muda mrefu sana, lakini unahitaji kufanya hivyo.
>> Jina langu ni Rob Bowden.
Na hii ni ufa.