ROB BOWDEN: Jien Rob, u ejja nikseb qsim. Mela ftakar mill-spec pset li aħna qed tmur biex tkun jeħtieġu li tuża l- funzjoni kripta. Għall-paġna bniedem, għandna żewġ hash jiddefinixxu _xopensource. Ma joqogħdu jinkwetaw dwar għaliex għandna bżonn li tagħmel dan. U wkoll hash jinkludu unistd.h. Allura ladarba dan huwa barra mill-mod, ejja jiksbu l-programm attwali. L-ewwel ħaġa li għandna bżonn tagħmel huwa li tiżgura l-utent daħal encrypted valida password fil-linja tal-kmand. Ftakar li l-programm huwa suppost li jitmexxew bħal dot mmejla xquq, u allura string encrypted. Allura hawnhekk aħna qed verifika biex jiġi żgurat li argc għal żewġ jekk irridu tkompli bil-programm. Jekk argc mhux tnejn, li tfisser jew l-utent ma daħħalx kriptat password fil-linja tal-kmand, jew daħal aktar minn sempliċiment il encrypted password fil-linja tal-kmand, li fiha każ aħna ma jafu x'għandhom jagħmlu ma 'l- linja argumenti kmand. Mela jekk argc kien tnejn, nistgħu tkompli. U hawn, aħna qed tmur biex tiddikjara varjabbli encrypted. Li jinsab biss ser alias l-oriġinali argv1 sabiex matul dan programm, aħna ma jkollhomx li hija sejħa argv1, li mbagħad trid taħseb dwar dak li attwalment fisser. Allura finalment, irridu biex jivvalidaw li il-password encrypted l-utent jiddaħħlu jistgħu jkunu ġew attwalment password encrypted. Per il-paġna bniedem ta 'kripta, l- password encrypted għandu jkun ta '13 karattri twil. Up hawn, avviż li aħna hash definit kriptaġġ tul bħala 13. Allura aħna qed biss tagħmel ċert li l- tul sensiela ta 'l encrypted password huwa 13. U jekk mhuwiex, irridu għall-ħruġ tal-programm. Allura ladarba dan huwa barra mill-mod, nistgħu issa fil-fatt tipprova ssib dak li l- password li taw l encrypted password kien. Hawnhekk, irridu li grab l-melħ mill-password encrypted. Ftakar, kull l-paġna bniedem, li l- ewwel żewġ karattri tal kriptat spag, bħal hawn - 50ZPJ u l-bqija - l-ewwel żewġ karattri jagħtu us il-melħ li ntuża fil-funzjoni kripta. U hawn, naraw li l-melħ kien ha. Allura aħna tixtieq li kopja l-ewwel tnejn karattri, tul melħ jkunu hash definita bħala tnejn. Irridu kopja l-ewwel żewġ karattri fis dan array, melħ. Avviż li għandna bżonn tul melħ plus waħda, peress li aħna għad għandhom bżonn null terminatur fl-aħħar ta 'melħ tagħna. Imbagħad aħna qed tmur biex jiddikjara dan array, guest, tat-tul max daqs plus wieħed, fejn it-tul max huwa hash definit bħala tmienja, peress li l-password massimu huwa tmien karattri fit-tul. U aħna qed tmur biex tuża din jtenni fuq kordi kollha possibbli li jistgħu jkun passwords validi. Allura jekk il-karattri validi fi password kienu biss, b, u ċ, allura aħna se jtenni fuq, b, c, aa, ba, ca, u l-bqija, sakemm irridu jiksbu biex tara cccccccc - tmienja c'S. U jekk aħna ma jistabbilixxi validu password, allura għandna bżonn li ngħidu li l- string encrypted ma kienx validu li tibda bil. Allura issa, aħna jilħqu dan filwaqt li 1 loop. Avviż li jfisser li huwa loop infinita. Avviż hemm ebda stqarrija break ġewwa ta 'dan loop infinita. Hemm biss ritorn dikjarazzjonijiet. Allura aħna qatt attwalment jistennew għall-ħruġ tal loop. Aħna biss nistennew għall-ħruġ tal-programm. Stajt miżjud din l-istqarrija għall-istampar Barra minn dan loop għal ftit jistampa dak raden attwali tagħna fil dak li l-password huwa. Issa, dak li huwa dan loop tagħmel? Huwa looping fuq kordi kollha possibbli li jista 'jkun passwords validi. L-ewwel ħaġa aħna qed tmur biex tagħmel hu tieħu raden attwali tagħna għal dak il- password. Aħna ser nieħdu l-melħ li aħna grabbed minn -sekwenza encrypted, u aħna jmorru għall-kriptaġġ l-raden. Dan se tagħtina raden encrypted, li aħna qed tmur biex iqabblu kontra -sekwenza encrypted li l-utent daħal fil-linja tal-kmand. Jekk huma l-istess, f'liema każ string komparabbli se terġa 'lura zero, jekk dawn qed l-istess, allura raden kien il- password li ġġenerat l encrypted spag, f'liema każ nistgħu jistampaw li bħala password tagħna u r-ritorn. Iżda jekk dawn ma kinux l-istess, li ifisser raden tagħna kienet żbaljata. U rridu li jtenni li l-raden validu li jmiss. Allura dak hu li dan waqt li loop qed tipprova tagħmel. Huwa ser jtenni raden tagħna għall-raden validu li jmiss. Avviż li meta ngħidu li karattru partikolari fil raden tagħna laħaq is-simbolu max, li up here huwa hash definit bħala tilde, peress li l-akbar karattru valur ASCII li utent jista 'jidħol fil- keyboard, meta l-karattru jilħaq il- max simbolu, allura aħna trid tibgħat lura lill-simbolu minimu, li huwa spazju, għal darb'oħra l-ASCII aktar baxx simbolu valur li utent jista ' jidħol fil-keyboard. Allura aħna qed tmur biex ikun stabbilit li is-simbolu minimu. U allura aħna qed tmur biex jmorru fuq il-karattru li jmiss. Allura kif huma guesses tagħna se jtenni? Ukoll, jekk il-karattri huma validi a, b, u c, allura jekk aħna beda, dan ser jtenni li b, dan ser jtenni li ċ. c hija simbolu max tagħna, hekk aħna ser jistabbilixxu c lura għal, is-simbolu minimu. U allura aħna ser jtenni indiċi għall-karattru li jmiss. Allura jekk il-raden oriġinali kienet c, li jmiss karattru se tkun l null terminatur. Down hawn, avviż li jekk il-karattru li aħna issa jridu inkrement kien il-terminatur null, allura aħna qed tmur biex tistabbilixxi li l- simbolu minimu. Allura jekk il-raden kien c, allura tagħna raden ġdida se tkun aa. U jekk raden oriġinali tagħna kienet cccc, allura raden ġdida tagħna se tkun aaaaa. Allura kull meta aħna jilħqu l-string massimu ta 'tul partikolari, allura aħna qed ser timplimenta l-sekwenza minimu tat-tul li jmiss, li se biss tkun karattri kollha ta ' is-simbolu minimu. Issa, dak li huwa dan il-kontroll tagħmel hawn? Ukoll, jekk indiċi mċaqlaq mill-tmien karattru għall-karattru disa - hekk aħna żid tmien c bħala preċedenti tagħna raden - allura indiċi huwa ser tiffoka fuq il- aħħar null terminatur tas raden tagħna array, li mhix maħsuba li attwalment jintużaw password tagħna. Allura jekk aħna huma ffokati fuq li l-aħħar null terminatur, allura aħna ma sabu password thats validu bl-użu biss tmienja karattri, li jfisser m'hemm l-ebda password valida li encrypts għall-sekwenza mogħtija. U aħna għandna biex jistampaw li, qal aħna ma setgħetx issib valida password, u r-ritorn. Allura dan loop filwaqt li se jtenni fuq kordi kollha possibbli. Jekk issib xi li encrypts l- string encrypted mistenni, dan ser ritorn li password. U ma jsibu xejn, allura huwa ser jerġa, l-istampar li ma kienx kapaċi li jsibu xejn. Issa, avviż li iterazzjoni fuq kollha kordi possibbli hija probabbilment se jieħu waqt. Ejja naraw kif fil-fatt twil li jieħu. Ejja jagħmlu xquq. Well, oops - jgħid undefined referenza għal kripta. Mela ftakar, għall-p settijiet spec u wkoll il-paġna bniedem għal kripta li aħna bżonn ir-rabta kripta. Issa, l-inadempjenza tagħmel kmand ma taf li inti tixtieq li tuża dik il-funzjoni. Mela ejja Kopja ta 'din il-kmand klijent u żid ftit fuq l-aħħar ta 'dan, jgħaqqdu crypt. Issa, hija tiġbor. Mela ejja jimxu xquq fuq mogħti string encrypted - hekk Caesar. Allura li kien pretty fast. Avviż li din ntemm fit-13. Ukoll, password encrypted Caesar jiġri li jkun 13. Mela ejja jippruvaw password ieħor. Ejja tieħu encrypted Hirschhorn tal password u jippruvaw qsim dan. Allura avviż konna diġà laħqu tliet karattri. U aħna qed iterazzjoni fuq kollha possibbli kordi tliet karattru. Dan ifisser li għandna stajt diġà finitura iterazzjoni fuq waħda kollha possibbli u żewġ Sekwenzi ta 'karattri. Issa, jidher qisu dan se tieħu filwaqt li qabel nilħqu l- kordi erba 'karattru. Huwa jista 'jieħu ftit minuti. Hija ma tieħu ftit minuti. Aħna fuq il-kordi ta 'erba' karattru. Imma issa, għandna bżonn li jtenni fuq kollha kordi erba 'karattru possibbli, li li jista 'jieħu forsi 10 minuti. U allura meta aħna jilħqu ħames karattru kordi, għandna bżonn li jtenni fuq kollha ta 'dawk, li jistgħu jieħu ftit sigħat. U għandna bżonn li jtenni fuq kollha possibbli sitt karattri kordi, li jista 'jieħu ftit jiem u l-bqija. Għalhekk tista 'tieħu potenzjalment twil ħafna żmien tirrepeti l fuq kollha possibbli tmien karattru u inqas kordi. Allura avviż li dan mhux neċessarjament algoritmu effiċjenti ħafna għall-konstatazzjoni password. Għandek mnejn taħseb li hemm modi aħjar. Per eżempju, il ZYX password! 32ab probabbilment mhix password komuni ħafna, billi l-password 12345 hija probabbilment ħafna aktar komuni. Allura mod wieħed ta 'tipprova ssib password aktar malajr huwa li tfittex biss fil passwords li huma aktar komuni. Hekk per eżempju, nistgħu nippruvaw biex taqra kliem minn dizzjunarju u jippruvaw kollha ta ' dawn il-kliem bħala guesses password tagħna. Issa, forsi password ma tkunx dik sempliċi. Forsi l-utent kien kemmxejn għaqlija u jippruvaw jpoġġu numru li l-aħħar ta 'kelma. Allura forsi password tagħhom kien password1. Allura inti tista 'tipprova iterazzjoni fuq kliem kollha fid-dizzjunarju ma 'wieħed mehmuż mat-tmiem ta 'dan. U allura forsi wara li tagħmel dan, inti ser tehmeż tnejn sa l-aħħar ta 'dan. Jew forsi l-utent qed tipprova tkun saħansitra aktar għaqlija, u huma jridu tagħhom password li tkun "Hacker," iżda dawn qed ser tissostitwixxi każijiet kollha ta 'e tal ma threes. Allura inti tista 'tagħmel dan ukoll. Jtenni fuq kollha kliem fid-dizzjunarju iżda tissostitwixxi karattri li look like numri ma 'dawk in-numri. Allura dan il-mod, inti tista 'qabda aktar passwords li huma pjuttost komuni. Iżda fl-aħħar, l-uniku mod inti tista ' jaqbdu passwords kollha huwa li brute seħħ jtenni fuq kollha kordi possibbli. Għalhekk fl-aħħar, għandek bżonn tagħmel biex jtenni fuq kordi kollha minn karattru wieħed għal tmien karattri, li jistgħu jieħdu żmien twil ħafna, iżda inti għandek bżonn tagħmel dan. Jisimni Rob Bowden. U dan huwa jixxaqqaq.