>> 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.