>> ROB Bowden: Unë jam Rob, dhe le të ketë plasaritje.
Pra mbani mend nga spec pset që ne jemi duke shkuar për të kanë nevojë të përdorin
Funksioni Crypt.
Për faqe njeriun, ne kemi dy hash përcaktojnë _xopensource.
Mos u shqetësoni pse ne kemi nevojë për të bërë këtë.
Dhe gjithashtu hash përfshijnë unistd.h.
>> Pra, një herë kjo është nga rruga, le të merrni me programin aktual.
Gjëja e parë që ne duhet të bëni është të siguroheni përdorues hyrë në një Encrypted vlefshme
fjalëkalimi në vijën komanduese.
Mos harroni se programi është menduar për t'u kandiduar si dot plas plagë, dhe
pastaj string koduar.
>> Pra, këtu ne jemi të kontrolluar për të siguruar argc që të dy në qoftë se ne duam të
të vazhdojë me programin.
Nëse argc nuk është dy, që do të thotë ose përdoruesi nuk ka hyrë në një Encrypted
fjalëkalimi në vijën komanduese, ose ata hyrë më shumë se vetëm Encrypted
fjalëkalimi me command line, në të cilën rast ne nuk e dimë se çfarë të bëjë me
argumente command line.
>> Pra, nëse argc ishte dy, ne mund të vazhdojë.
Dhe këtu, ne jemi duke shkuar për të deklaruar a koduar ndryshueshme.
Kjo është vetëm do të alias origjinale argv1 në mënyrë që gjatë kësaj
Programi, ne nuk kemi për të thirrur atë argv1, të cilat atëherë ju duhet të mendoni
në lidhje me atë që do të thoshte në të vërtetë.
>> Pra, më në fund, ne duam që të vërtetoni se fjalëkalimi koduar përdorues
hyri në fakt mund të ketë qenë Një fjalëkalim Encrypted.
Per faqes njeri i crypt, të Encrypted fjalëkalimi duhet të jetë 13
karaktere.
Deri këtu, vini re se ne hash definuar encrypt si gjatësi 13.
Pra, ne jemi vetëm duke u siguruar që Gjatësia varg i koduar
fjalëkalimi është 13.
>> Dhe në qoftë se kjo nuk është, ne duam për të dalë nga programi.
Pra, një herë kjo është nga rruga, ne mund të tani në fakt përpiqen për të gjetur se çfarë
që i dha fjalëkalimi koduar fjalëkalimi ishte.
Këtu, ne duam për të rrëmbyer kripë nga fjalëkalim Encrypted.
Kujtohet, per-faqe njeri, që para dy karaktere të një Encrypted
string, si këtu -
50ZPJ dhe kështu me radhë -
para dy karaktere të japë na kripë që është përdorur
në funksion crypt.
>> Dhe këtu, shohim se kripa ishte e ha.
Pra, ne duam të kopjoni dy të parat karaktere, gjatësia kripë qenë hash
përcaktuar si dy.
Ne duhet të kopjoni para dy karaktere në këtë koleksion, kripë.
Vini re se ne kemi nevojë për gjatësinë kripë plus një, pasi ne ende nevojë për një nul
Terminator në fund të kripës tonë.
>> Pastaj ne jemi duke shkuar për të deklaruar këtë koleksion, mysafir, max gjatësi prej madhësisë plus
njëri, ku gjatësia max eshte Hash përcaktohet si tetë, pasi fjalëkalimi maksimale
është tetë karaktere të gjatë.
Dhe ne jemi duke shkuar për të përdorur këtë për të iterate mbi të gjitha vargjet e mundshme që mund të
fjalëkalime të jetë i vlefshëm.
Pra, nëse personazhet vlefshme në një fjalëkalim ishin vetëm një, b, dhe c, atëherë
ne do të iterate mbi a, b, c, aa, ba, ca, dhe kështu me radhë, derisa
ne të merrni për të parë cccccccc -
tetë të c.
>> Dhe në qoftë se ne nuk kemi një të vlefshme poshtë password, atëherë ne duhet të themi se
string Encrypted nuk ishte vlefshme për të filluar me.
Deri tani, ne kemi arritur këtë, ndërsa 1 loop.
Vini re që do të thotë se është një lak të pafund.
>> Njoftim ka asnjë deklaratë pushim brenda këtij lak të pafund.
Nuk janë vetëm deklarata të kthehen.
Pra, ne asnjëherë nuk presim për të dalë nga lak.
Ne vetëm të presin për të dalë nga programi.
Unë kam shtuar këtë deklaratë të shtypura në krye të këtij lak për të vetëm të shtypura nga
me mend se çfarë ynë aktual në çfarë është fjalëkalimi.
>> Tani, çfarë është kjo loop duke bërë?
Është looping mbi të gjitha vargjet e mundshme që mund të jenë të vlefshme fjalëkalimet.
Gjëja e parë që ne jemi duke shkuar për të bëni është të marrë me mend tonë aktuale për atë
është fjalëkalimi.
Ne do të marrë kripë që kemi rrëmbyer nga string Encrypted, dhe ne jemi
duke shkuar për të encrypt guess.
Kjo do të na japë një mend të koduar, të cilat ne jemi duke shkuar për të krahasuar kundër
string koduar që përdoruesi hyri në vijën komanduese.
>> Nëse ato janë të njëjta, në të cilin rast string krahasueshme do të kthehet zero, në qoftë se
ata janë të njëjtë, atëherë mendoj se ishte fjalëkalimi se gjenerohet koduar
string, rast në të cilin ne mund të shtypura se si fjalëkalim tonë dhe kthimit.
Por në qoftë se ata nuk ishin të njëjta, që do të thotë Mend ynë ishte i pasaktë.
>> Dhe ne duam që të iterate guess ardhshëm të vlefshme.
Pra, kjo është ajo që kjo, ndërsa loop është duke u përpjekur për të bërë.
Ajo do të iterate guess tonë me mend tjeter vlefshme.
Vini re se kur themi se një Karakteri i veçantë në mend sonë ka
arriti në simbolin max, e cila deri këtu hash është përcaktuar si një tildë, pasi
kjo është vlera më e madhe karakteri ASCII që një përdorues mund të hyjë në
keyboard, kur karakteri arrin max simbol, atëherë ne duam të dërgojmë
atë përsëri në simbolin minimale, e cila është një hapësirë, sërish ASCII ulët
Simboli vlerë që një përdorues mund të të hyjë në tastierë.
>> Pra, ne jemi duke shkuar për të vendosur se për simbolin minimale.
Dhe atëherë ne jemi duke shkuar për të shkuar mbi te te karakter tjeter.
Pra, si janë supozime tona do të iterate?
E pra, nëse personazhet janë të vlefshme a, b, dhe c, atëherë në qoftë se kemi filluar me një,
ajo do të b iterate, ajo do të iterate të c.
c është simboli ynë max, kështu që ne do të caktuar c përsëri në një, simbol minimale.
Dhe pastaj ne do të iterate indeksin me karakter tjeter.
>> Pra, nëse supozimi fillestar ishte c, tjetër Karakteri do të jetë null
Terminator.
Këtu poshtë, vini re se në qoftë se karakteri se ne tani duam të
Rritja ishte Terminator null, atëherë ne jemi duke shkuar për të vendosur atë në
simbol minimale.
Pra, nëse guess ishte c, atëherë tonë Mend i ri do të jetë aa.
Dhe në qoftë se Mend ynë fillestar ishte cccc, atëherë guess tonë të re
do të jetë aaaaa.
>> Pra, sa herë që kemi arritur varg maksimale e një gjatësi të caktuar, atëherë ne jemi
do të zbatojë për vargun minimale të gjatësisë tjeter, e cila do
vetëm të jetë i të gjitha karaktere e simbol minimale.
Tani, çfarë është kjo kontroll duke bërë këtu?
E pra, në qoftë se indeksi u zhvendos nga teta karakter të karakterit nëntë -
kështu që ne të shtoni tetë e C, si previous mendoj tonë -
atëherë indeksi do të përqëndrohet në e fundit null terminator i guess tonë
array, e cila nuk ka për qëllim që në fakt të përdoren në fjalëkalim tonë.
>> Pra, nëse ne jemi të fokusuar në atë null fundit terminator, atëherë ne nuk kemi gjetur një
fjalëkalim që është e vlefshme duke përdorur vetëm tetë karaktere, që do të thotë nuk ka asnjë
fjalëkalim i vlefshëm që kodon te vargut të dhënë.
Dhe ne kemi për të shtypur atë, duke thënë: ne nuk mund të gjeni një të vlefshme
password, dhe kthimi.
Pra, kjo loop, ndërsa do të iterate mbi të gjitha vargjet e mundshme.
>> Nëse gjen ndonjë që kodon për string pritet koduar, ajo do të
kthehen se fjalëkalimin.
Dhe kjo nuk do të gjeni ndonjë gjë, atëherë ajo do të kthehet, shtypjen se ajo
nuk ishte në gjendje për të gjetur ndonjë gjë.
Tani, vini re se iterating mbi të gjitha vargjet e mundshme është ndoshta do të
të marrë një kohë.
Le të shohim se si në të vërtetë gjatë që merr.
>> Le të bëjnë plas.
E pra, oops - ai thotë se i papërcaktuar referenca për crypt.
Pra mbani mend, për p përcakton dhe spekulim edhe faqja njeri për crypt se ne
nevojë për të lidhur në dhomë e nëndheshme.
Tani, parazgjedhur të bëjë komandë nuk e di se ju
doni të përdorni këtë funksion.
>> Pra, le të kopjoni këtë komandë klientit dhe vetëm të shtoni deri në fund
e saj, Crypt lidh.
Tani, ajo harton.
Pra, le të kandidojë çarje në një të dhënë string i mbyllur -
kështu që është e Cezarit.
Kështu që ishte shumë shpejt.
>> Vini re se kjo përfundoi më 13.
E pra, fjalëkalimi koduar i Cezarit; ndodh të jetë 13.
Pra, le të provoni një tjetër fjalëkalim.
Le të marrin koduar Hirschhorn-së fjalekalimin dhe provoni plasaritje se.
>> Pra, vini re se ne kemi arritur tashmë tre karaktere.
Dhe ne jemi iterating mbi të gjitha të jetë e mundur tre-strings karakter.
Kjo do të thotë që ne tashmë e kam përfunduar iterating mbi të gjitha një e mundshme dhe
dy vargjet karakter.
Tani, kjo duket si ky do të të marrë një kohë para se të arrijmë
katër-karakter strings.
Ajo mund të marrë disa minuta.
>> Ajo nuk ka marrë një çift të minuta.
Ne jemi në katër-karakter strings.
Por tani, ne kemi nevojë për të iterate mbi të gjitha mundshme katër-karakter vargjet, të cilat
që mund të marrë ndoshta 10 minuta.
Dhe atëherë kur kemi arritur pesë karakterin vargjet, ne kemi nevojë për të iterate mbi të gjitha
e atyre, të cilat mund të marrë një orë çift.
Dhe ne kemi nevojë për të iterate mbi të gjitha të jetë e mundur Gjashtë-strings karakter, i cili
mund të marrë disa ditë dhe kështu me radhë.
>> Pra, ajo mund të marrë një kohë të gjatë potencialisht shumë koha për të iterate mbi të gjitha të jetë e mundur
tetë-karakteri dhe vargjet më pak.
Pra, vini re se kjo nuk është domosdoshmërisht një algorithm shumë efikas për gjetjen e
një fjalëkalim.
Ju mund të mendoni se nuk ka janë mënyra më të mira.
Për shembull, ZYX fjalëkalimi! 32ab ndoshta nuk është një fjalëkalim shumë të zakonshme,
ndërsa fjalëkalimi 12345 është ndoshta një shumë më të zakonshme.
>> Pra, një mënyrë e duke u përpjekur për të gjetur një fjalëkalim më shpejt që është vetëm shikoni
në fjalëkalimet që janë më të zakonshme.
Kështu për shembull, ne mund të përpiqemi për të lexuar fjalët nga një fjalor dhe të përpiqemi të gjithë
ato fjalë si hamendjeve tona fjalëkalim.
Tani, ndoshta një fjalëkalim nuk është kaq e thjeshtë.
Ndoshta përdorues ishte disi i zgjuar dhe të përpiqemi për të bashkëngjitur një numër
fundi i nje fjale.
>> Pra, ndoshta fjalëkalimi tyre ishte password1.
Kështu që ju mund të përpiquni të iterating mbi të gjitha fjalët ne fjalor me nje njërit
bashkangjitur në fund të tij.
Dhe pastaj ndoshta pas duke bërë që, ju do të append a dy në fund të tij.
>> Apo ndoshta përdoruesi është duke u përpjekur të jetë edhe më i mençur, dhe ata duan tyre
fjalëkalim për jetë "hacker", por ata janë të do të zëvendësojë të gjitha instancat e e e
me threes.
Kështu që ju mund të bëni këtë shumë.
Iterate mbi të gjitha fjalët në fjalor por të zëvendësojë karaktere që
duken si numra me ato numra.
>> Pra këtë mënyrë, ju mund të arrijë edhe më shumë fjalëkalimet që janë mjaft të zakonshme.
Por në fund, mënyra e vetme që ju mund të kapur të gjitha fjalëkalimet është shtazë
detyrojë iterate mbi të gjitha vargjet e mundshme.
Pra, në fund, ju keni nevojë për të iterate mbi të gjitha vargjet nga një karakter në
tetë karaktere, të cilat mund të marrin një kohë shumë të gjatë, por ju duhet të bëni atë.
>> Emri im është Rob Bowden.
Dhe kjo është Crack.