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.