ROB Bowden: Ja sam Rob, a neka je pucanje. Pa sjetite se iz pset spec. da ćemo se trebaju koristiti kriptu funkciju. Za čovjeka stranici, imamo dva hash definirati _xopensource. Ne brinite o tome zašto moramo to učiniti. I također uključuju mljeveno meso unistd.h. Tako jednom da je zabit, neka je doći do stvarnog programa. Prva stvar koju trebate učiniti je da provjerite korisnik unio vrijedi kodiran lozinku na naredbenog retka. Sjetite se da je program trebao koji će se prikazivati ​​kao dot slash pukotinu, i zatim kodiran string. Dakle ovdje smo provjeru kako bi bili sigurni da argc na dva, ako želimo nastaviti s programom. Ako argc nisu dva, to znači da je bilo korisnik nije unio kodiran lozinku na naredbenog retka, ili oni stupio je više nego samo kodiran lozinku u naredbeni redak, u kojem Slučaj ne znamo što učiniti s argumenata naredbenog retka. Dakle, ako argc je dva, možemo nastaviti. I ovdje, idemo proglasiti promjenjiva kodiran. To jednostavno će alias izvornih argv1, tako da je tijekom ove Program, nemamo ga nazvati argv1, koji onda morate razmišljati o tome što to zapravo znači. Dakle, na kraju, želimo potvrditi da kriptirani lozinkom korisnik ušao bi zapravo bili kriptirani lozinkom. Po ljudskom stranici kripti, na kriptirani password moraju biti 13 znakova. Ovdje gore, primijetiti da smo hash definira šifriranje duljinu kao 13.. Dakle, mi smo samo pazeći da string duljina kodiran lozinka je 13. A ako to nije, želimo za izlaz iz programa. Tako jednom da je zabit, možemo sada zapravo pokušati pronaći ono što lozinka koje je dao kodiran Lozinka je. Ovdje želimo da zgrabite sol iz šifriranom lozinkom. Zapamtite, čovjek po stranici, da Prva dva znaka kodiran string, mi se ovdje - 50ZPJ i tako dalje - prva dva znaka daju nam soli koja je korištena u kripti funkciji. I ovdje vidimo da je sol ha. Dakle, želimo kopirati prva dva likovi, sol duljina je hash definira kao dva. Mi moramo kopirati prve dvije znakova u ovom nizu, sol. Obavijest da moramo soli dužine plus jedan, budući da još uvijek treba null terminator na kraju našeg soli. Onda ćemo proglasiti ovaj niz, gost, od veličine max duljine plus jedan, gdje je max duljina je definirana hash kao osam, od maksimalno lozinkom je osam znakova. I mi ćemo to upotrijebiti za iteraciju preko svih mogućih nizova koji bi mogao biti valjane lozinke. Dakle, ako su valjani znakovi lozinke u su samo a, b i c, a zatim bismo iteraciju više, b, c, aa, ba, CA, i tako dalje, sve dok ćemo se vidjeti cccccccc - osam Ca. I ako imamo ne dolje valjana lozinku, onda moramo reći da kodiran string nije bio važi za početak. Tako sada, mi bi se to postiglo, dok 1 petlje. Obavijest to znači da je klapa. Obavijest nema izjava Stanka unutar ove beskonačne petlje. Tu su se vratili samo izjave. Dakle, mi zapravo nikada očekivati za izlazak iz petlje. Mi samo očekivati ​​da će izaći iz programa. Dodao sam ovu izjavu za ispis Vrh ove petlje samo za ispis iz što je naš trenutni nagađati ono što je lozinka. Sada, što je to loop radi? Prošlo petlje preko svih mogućih nizova koje bi mogle biti valjane lozinke. Prvo što ćemo učiniti je uzeti našu trenutnu pogodak za ono lozinka. Mi ćemo uzeti soli koje smo uhvatio s kodiran string, a mi smo ide za šifriranje nagađati. To će nam dati šifrirani pogađati, koji ćemo usporediti protiv kriptirani niz koji korisnik stupio na naredbenog retka. Ako su isti, u kojem slučaju string usporediti će se vratiti na nulu, ako je oni su isti, onda valjda bio lozinka koje generira kodiran string, u kojem slučaju se može ispisivati da su naše lozinkom i povratak. No, ako oni nisu bili isti, da znači naša pretpostavka bila pogrešna. I želimo ponoviti da Sljedeći vrijedi pretpostavka. Dakle, to je ono to dok petlja se pokušava učiniti. To će se ponoviti našu pretpostavku na sljedeći važeći pogodak. Obavijest da kada kažemo da Konkretno lik u našoj pogodak ima dosegao max simbol, koji se ovdje se hash definira kao tilde, jer to je najveća vrijednost ASCII znakova koje korisnik može unijeti tipkovnice, kad lik dosegne max simbol, a zatim želimo poslati ga natrag na minimalnu simbol, koji je prostor, opet je najmanji ASCII Vrijednost simbol koji korisnik može unijeti na tipkovnici. Tako ćemo postaviti da na minimalnu simbol. A onda ćemo ići na sljedeći znak. Pa kako su naši pogodi će se ponoviti? I, ako su valjani znakovi su a, b, ic, pa ako smo započeli s, to ću ponoviti na b, to će iteraciju na c. c je naš max simbol, pa ćemo dogovoriti c natrag, minimalna simbol. A onda ćemo ponoviti indeksa na sljedeći znak. Dakle, ako je izvorna pretpostavka je c, pored Lik će biti null Terminator. Ovdje dolje, primijetio da ako lik da mi sada žele prirast bio null terminator, onda ćemo ga postaviti na Minimalna simbol. Dakle, ako je pogodak bio c, onda je naša Novi pogodak će biti aa. A ako naša izvorna pretpostavka je cccc, a zatim naš novi pogodak će biti aaaaa. Dakle, kad god dođemo do maksimalno string danog duljine, tada smo će provesti na minimalnu string od sljedećeg duljine, koji će Samo se svi likovi Minimalna simbol. Sada, što je ovaj ček radiš ovdje? Pa, ako je indeks preselio na osmo Lik na devet karaktera - pa smo dodali osam c-ih kao Naša prethodna pogodite - Indeks onda će se usredotočiti na Posljednji null terminator našeg pogodak polje, što nije značilo da je zapravo se koristiti u našoj lozinkom. Dakle, ako smo fokusirani na tom posljednjem null Terminator, onda nismo našli lozinka valjana je korištenjem samo osam likovi, što znači da ne postoji važeća lozinka koje šifrira u određenom nizu. I moramo napisati i da, rekavši nismo uspjeli pronaći valjana lozinka i povratak. Dakle, ovo while petlja će se ponoviti tijekom svih mogućih nizova. Ako se utvrdi da je bilo šifrira se Očekuje kodiran string, to će vrati tu lozinku. I to ne nađe ništa, a zatim ona će se vratiti, tisak da je to nije bio u mogućnosti pronaći ništa. Sada, primijetiti da iterating preko svega moguća žice vjerojatno će potrajati. Idemo vidjeti koliko je zapravo dugo da traje. Učinimo pukotine. Pa, pardon - kaže nedefinirano pozivanje na kripti. Tako zapamtite, za p postavlja spec. i Također man stranicu za kripti koje smo trebate povezati u kripti. Sada, zadana bi naredbu ne znam da li želite koristiti tu funkciju. Tako ćemo kopirati ovu naredbu klijenta i samo dodati na kraju nje, povezujući kripti. Sada, što sastavlja. Tako ćemo pokrenuti pukotine na dano kodiran string - tako Carev. Tako da je prilično brzo. Obavijest da je ovaj završio na 13.. Pa, Cezarov kriptirani lozinkom dogoditi da bude 13. Dakle, pokušajmo još lozinku. Uzmimo Hirschhorna kodiran lozinkom i pokušati pucanja to. Dakle, primijetite da smo već postigli tri znaka. I mi smo iterating preko svega to moguće tri niza znakova. To znači da smo već završili Ponavljanje tijekom svu moguću jedan i dva niza znakova. Sada, izgleda da će se to potrajati neko vrijeme prije nego što stignemo četiri znakova. To bi moglo potrajati nekoliko minuta. To nije potrajati nekoliko minuta. Mi smo na četiri znakova. Ali sada, moramo ponoviti preko svega moguća četiri niza znakova, koji se koja bi mogla potrajati možda 10 minuta. I onda kad dođemo do pet karakter žice, moramo ponoviti preko svega od onih, što bi moglo potrajati nekoliko sati. I moramo ponoviti tijekom ikako moguće šest-niz znakova koji možda trebati nekoliko dana i tako dalje. Dakle, to bi moglo potrajati jako dugo potencijalno Vrijeme je da ponove više uopće moguće osam znakova, a manje žice. Dakle, primijetite da to nije nužno Vrlo učinkovit algoritam za pronalaženje lozinkom. Vi možda mislite da postoji i bolji načini. Na primjer, lozinkom zyx! 32ab vjerojatno nije vrlo čest lozinkom, dok je lozinka 12345 vjerojatno puno više zajedničkog. Dakle, jedan od načina pokušava pronaći lozinke brže je samo pogled na lozinki koje su češći. Tako na primjer, možemo pokušati pročitati riječi iz rječnika i pokušati sve one riječi što su naši lozinka nagađanja. Sada, možda i lozinkom nije tako jednostavno. Možda je korisnik nešto pametno i pokušati dodavanjem broja na kraju riječi. Dakle, možda je password1 njihove lozinke. Tako možete isprobati tijekom iterating sve riječi u rječniku s jednim dodaje na kraju. A onda možda i nakon što je to, vi ćete dodati dva na kraju. Ili možda korisnik pokušava biti još više pametan, a oni žele da njihova lozinka biti "haker", ali oni su će zamijeniti sve instance E je s trojkama. Tako da bi mogao to učiniti previše. Ponoviti više od svih riječi u rječniku ali zamijenite znakove da izgleda kao brojeve s tim brojevima. Dakle, ovaj način, možda uhvatiti još lozinke koje su prilično uobičajene. Ali na kraju, jedini način možete uhvatiti sve lozinke je gruba prisiliti ponoviti preko svega moguća žice. Tako je na kraju, to ne treba da ponove nad svim žice iz jednog lika u osam znakova, što bi moglo potrajati jako dugo vremena, ali morate to učiniti. Moje ime je Rob Bowden. A to je pukotina.