1 00:00:00,000 --> 00:00:13,000 2 00:00:13,000 --> 00:00:15,890 >> ROB Bowden: Unë jam Rob, dhe le të ketë plasaritje. 3 00:00:15,890 --> 00:00:19,390 Pra mbani mend nga spec pset që ne jemi duke shkuar për të kanë nevojë të përdorin 4 00:00:19,390 --> 00:00:20,890 Funksioni Crypt. 5 00:00:20,890 --> 00:00:26,330 Për faqe njeriun, ne kemi dy hash përcaktojnë _xopensource. 6 00:00:26,330 --> 00:00:28,290 Mos u shqetësoni pse ne kemi nevojë për të bërë këtë. 7 00:00:28,290 --> 00:00:31,550 Dhe gjithashtu hash përfshijnë unistd.h. 8 00:00:31,550 --> 00:00:35,920 >> Pra, një herë kjo është nga rruga, le të merrni me programin aktual. 9 00:00:35,920 --> 00:00:39,570 Gjëja e parë që ne duhet të bëni është të siguroheni përdorues hyrë në një Encrypted vlefshme 10 00:00:39,570 --> 00:00:41,520 fjalëkalimi në vijën komanduese. 11 00:00:41,520 --> 00:00:46,050 Mos harroni se programi është menduar për t'u kandiduar si dot plas plagë, dhe 12 00:00:46,050 --> 00:00:48,120 pastaj string koduar. 13 00:00:48,120 --> 00:00:52,990 >> Pra, këtu ne jemi të kontrolluar për të siguruar argc që të dy në qoftë se ne duam të 14 00:00:52,990 --> 00:00:54,380 të vazhdojë me programin. 15 00:00:54,380 --> 00:00:58,830 Nëse argc nuk është dy, që do të thotë ose përdoruesi nuk ka hyrë në një Encrypted 16 00:00:58,830 --> 00:01:02,560 fjalëkalimi në vijën komanduese, ose ata hyrë më shumë se vetëm Encrypted 17 00:01:02,560 --> 00:01:05,379 fjalëkalimi me command line, në të cilën rast ne nuk e dimë se çfarë të bëjë me 18 00:01:05,379 --> 00:01:07,660 argumente command line. 19 00:01:07,660 --> 00:01:11,390 >> Pra, nëse argc ishte dy, ne mund të vazhdojë. 20 00:01:11,390 --> 00:01:14,160 Dhe këtu, ne jemi duke shkuar për të deklaruar a koduar ndryshueshme. 21 00:01:14,160 --> 00:01:17,650 Kjo është vetëm do të alias origjinale argv1 në mënyrë që gjatë kësaj 22 00:01:17,650 --> 00:01:20,690 Programi, ne nuk kemi për të thirrur atë argv1, të cilat atëherë ju duhet të mendoni 23 00:01:20,690 --> 00:01:22,950 në lidhje me atë që do të thoshte në të vërtetë. 24 00:01:22,950 --> 00:01:27,180 >> Pra, më në fund, ne duam që të vërtetoni se fjalëkalimi koduar përdorues 25 00:01:27,180 --> 00:01:30,840 hyri në fakt mund të ketë qenë Një fjalëkalim Encrypted. 26 00:01:30,840 --> 00:01:35,120 Per faqes njeri i crypt, të Encrypted fjalëkalimi duhet të jetë 13 27 00:01:35,120 --> 00:01:36,440 karaktere. 28 00:01:36,440 --> 00:01:41,500 Deri këtu, vini re se ne hash definuar encrypt si gjatësi 13. 29 00:01:41,500 --> 00:01:46,140 Pra, ne jemi vetëm duke u siguruar që Gjatësia varg i koduar 30 00:01:46,140 --> 00:01:49,090 fjalëkalimi është 13. 31 00:01:49,090 --> 00:01:52,280 >> Dhe në qoftë se kjo nuk është, ne duam për të dalë nga programi. 32 00:01:52,280 --> 00:01:56,470 Pra, një herë kjo është nga rruga, ne mund të tani në fakt përpiqen për të gjetur se çfarë 33 00:01:56,470 --> 00:02:00,410 që i dha fjalëkalimi koduar fjalëkalimi ishte. 34 00:02:00,410 --> 00:02:04,870 Këtu, ne duam për të rrëmbyer kripë nga fjalëkalim Encrypted. 35 00:02:04,870 --> 00:02:08,930 Kujtohet, per-faqe njeri, që para dy karaktere të një Encrypted 36 00:02:08,930 --> 00:02:10,590 string, si këtu - 37 00:02:10,590 --> 00:02:12,770 50ZPJ dhe kështu me radhë - 38 00:02:12,770 --> 00:02:16,170 para dy karaktere të japë na kripë që është përdorur 39 00:02:16,170 --> 00:02:18,080 në funksion crypt. 40 00:02:18,080 --> 00:02:21,740 >> Dhe këtu, shohim se kripa ishte e ha. 41 00:02:21,740 --> 00:02:27,610 Pra, ne duam të kopjoni dy të parat karaktere, gjatësia kripë qenë hash 42 00:02:27,610 --> 00:02:30,230 përcaktuar si dy. 43 00:02:30,230 --> 00:02:35,970 Ne duhet të kopjoni para dy karaktere në këtë koleksion, kripë. 44 00:02:35,970 --> 00:02:39,340 Vini re se ne kemi nevojë për gjatësinë kripë plus një, pasi ne ende nevojë për një nul 45 00:02:39,340 --> 00:02:42,440 Terminator në fund të kripës tonë. 46 00:02:42,440 --> 00:02:46,940 >> Pastaj ne jemi duke shkuar për të deklaruar këtë koleksion, mysafir, max gjatësi prej madhësisë plus 47 00:02:46,940 --> 00:02:51,930 njëri, ku gjatësia max eshte Hash përcaktohet si tetë, pasi fjalëkalimi maksimale 48 00:02:51,930 --> 00:02:55,090 është tetë karaktere të gjatë. 49 00:02:55,090 --> 00:02:59,860 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ë 50 00:02:59,860 --> 00:03:01,430 fjalëkalime të jetë i vlefshëm. 51 00:03:01,430 --> 00:03:07,720 Pra, nëse personazhet vlefshme në një fjalëkalim ishin vetëm një, b, dhe c, atëherë 52 00:03:07,720 --> 00:03:14,970 ne do të iterate mbi a, b, c, aa, ba, ca, dhe kështu me radhë, derisa 53 00:03:14,970 --> 00:03:16,690 ne të merrni për të parë cccccccc - 54 00:03:16,690 --> 00:03:19,600 tetë të c. 55 00:03:19,600 --> 00:03:23,620 >> Dhe në qoftë se ne nuk kemi një të vlefshme poshtë password, atëherë ne duhet të themi se 56 00:03:23,620 --> 00:03:26,590 string Encrypted nuk ishte vlefshme për të filluar me. 57 00:03:26,590 --> 00:03:29,970 Deri tani, ne kemi arritur këtë, ndërsa 1 loop. 58 00:03:29,970 --> 00:03:33,100 Vini re që do të thotë se është një lak të pafund. 59 00:03:33,100 --> 00:03:36,430 >> Njoftim ka asnjë deklaratë pushim brenda këtij lak të pafund. 60 00:03:36,430 --> 00:03:38,570 Nuk janë vetëm deklarata të kthehen. 61 00:03:38,570 --> 00:03:41,210 Pra, ne asnjëherë nuk presim për të dalë nga lak. 62 00:03:41,210 --> 00:03:44,750 Ne vetëm të presin për të dalë nga programi. 63 00:03:44,750 --> 00:03:48,220 Unë kam shtuar këtë deklaratë të shtypura në krye të këtij lak për të vetëm të shtypura nga 64 00:03:48,220 --> 00:03:51,790 me mend se çfarë ynë aktual në çfarë është fjalëkalimi. 65 00:03:51,790 --> 00:03:53,630 >> Tani, çfarë është kjo loop duke bërë? 66 00:03:53,630 --> 00:03:58,330 Është looping mbi të gjitha vargjet e mundshme që mund të jenë të vlefshme fjalëkalimet. 67 00:03:58,330 --> 00:04:02,700 Gjëja e parë që ne jemi duke shkuar për të bëni është të marrë me mend tonë aktuale për atë 68 00:04:02,700 --> 00:04:03,920 është fjalëkalimi. 69 00:04:03,920 --> 00:04:07,230 Ne do të marrë kripë që kemi rrëmbyer nga string Encrypted, dhe ne jemi 70 00:04:07,230 --> 00:04:09,850 duke shkuar për të encrypt guess. 71 00:04:09,850 --> 00:04:14,760 Kjo do të na japë një mend të koduar, të cilat ne jemi duke shkuar për të krahasuar kundër 72 00:04:14,760 --> 00:04:18,810 string koduar që përdoruesi hyri në vijën komanduese. 73 00:04:18,810 --> 00:04:23,030 >> Nëse ato janë të njëjta, në të cilin rast string krahasueshme do të kthehet zero, në qoftë se 74 00:04:23,030 --> 00:04:28,050 ata janë të njëjtë, atëherë mendoj se ishte fjalëkalimi se gjenerohet koduar 75 00:04:28,050 --> 00:04:33,520 string, rast në të cilin ne mund të shtypura se si fjalëkalim tonë dhe kthimit. 76 00:04:33,520 --> 00:04:37,520 Por në qoftë se ata nuk ishin të njëjta, që do të thotë Mend ynë ishte i pasaktë. 77 00:04:37,520 --> 00:04:43,250 >> Dhe ne duam që të iterate guess ardhshëm të vlefshme. 78 00:04:43,250 --> 00:04:46,410 Pra, kjo është ajo që kjo, ndërsa loop është duke u përpjekur për të bërë. 79 00:04:46,410 --> 00:04:51,760 Ajo do të iterate guess tonë me mend tjeter vlefshme. 80 00:04:51,760 --> 00:04:56,080 Vini re se kur themi se një Karakteri i veçantë në mend sonë ka 81 00:04:56,080 --> 00:05:01,770 arriti në simbolin max, e cila deri këtu hash është përcaktuar si një tildë, pasi 82 00:05:01,770 --> 00:05:05,710 kjo është vlera më e madhe karakteri ASCII që një përdorues mund të hyjë në 83 00:05:05,710 --> 00:05:11,210 keyboard, kur karakteri arrin max simbol, atëherë ne duam të dërgojmë 84 00:05:11,210 --> 00:05:17,150 atë përsëri në simbolin minimale, e cila është një hapësirë, sërish ASCII ulët 85 00:05:17,150 --> 00:05:20,800 Simboli vlerë që një përdorues mund të të hyjë në tastierë. 86 00:05:20,800 --> 00:05:22,940 >> Pra, ne jemi duke shkuar për të vendosur se për simbolin minimale. 87 00:05:22,940 --> 00:05:25,720 Dhe atëherë ne jemi duke shkuar për të shkuar mbi te te karakter tjeter. 88 00:05:25,720 --> 00:05:28,730 Pra, si janë supozime tona do të iterate? 89 00:05:28,730 --> 00:05:33,685 E pra, nëse personazhet janë të vlefshme a, b, dhe c, atëherë në qoftë se kemi filluar me një, 90 00:05:33,685 --> 00:05:36,630 ajo do të b iterate, ajo do të iterate të c. 91 00:05:36,630 --> 00:05:44,360 c është simboli ynë max, kështu që ne do të caktuar c përsëri në një, simbol minimale. 92 00:05:44,360 --> 00:05:48,100 Dhe pastaj ne do të iterate indeksin me karakter tjeter. 93 00:05:48,100 --> 00:05:53,920 >> Pra, nëse supozimi fillestar ishte c, tjetër Karakteri do të jetë null 94 00:05:53,920 --> 00:05:55,560 Terminator. 95 00:05:55,560 --> 00:06:00,670 Këtu poshtë, vini re se në qoftë se karakteri se ne tani duam të 96 00:06:00,670 --> 00:06:04,690 Rritja ishte Terminator null, atëherë ne jemi duke shkuar për të vendosur atë në 97 00:06:04,690 --> 00:06:06,260 simbol minimale. 98 00:06:06,260 --> 00:06:11,431 Pra, nëse guess ishte c, atëherë tonë Mend i ri do të jetë aa. 99 00:06:11,431 --> 00:06:16,050 Dhe në qoftë se Mend ynë fillestar ishte cccc, atëherë guess tonë të re 100 00:06:16,050 --> 00:06:18,380 do të jetë aaaaa. 101 00:06:18,380 --> 00:06:24,430 >> Pra, sa herë që kemi arritur varg maksimale e një gjatësi të caktuar, atëherë ne jemi 102 00:06:24,430 --> 00:06:29,090 do të zbatojë për vargun minimale të gjatësisë tjeter, e cila do 103 00:06:29,090 --> 00:06:34,420 vetëm të jetë i të gjitha karaktere e simbol minimale. 104 00:06:34,420 --> 00:06:36,970 Tani, çfarë është kjo kontroll duke bërë këtu? 105 00:06:36,970 --> 00:06:42,780 E pra, në qoftë se indeksi u zhvendos nga teta karakter të karakterit nëntë - 106 00:06:42,780 --> 00:06:46,460 kështu që ne të shtoni tetë e C, si previous mendoj tonë - 107 00:06:46,460 --> 00:06:51,270 atëherë indeksi do të përqëndrohet në e fundit null terminator i guess tonë 108 00:06:51,270 --> 00:06:57,990 array, e cila nuk ka për qëllim që në fakt të përdoren në fjalëkalim tonë. 109 00:06:57,990 --> 00:07:03,530 >> Pra, nëse ne jemi të fokusuar në atë null fundit terminator, atëherë ne nuk kemi gjetur një 110 00:07:03,530 --> 00:07:07,750 fjalëkalim që është e vlefshme duke përdorur vetëm tetë karaktere, që do të thotë nuk ka asnjë 111 00:07:07,750 --> 00:07:10,550 fjalëkalim i vlefshëm që kodon te vargut të dhënë. 112 00:07:10,550 --> 00:07:13,520 Dhe ne kemi për të shtypur atë, duke thënë: ne nuk mund të gjeni një të vlefshme 113 00:07:13,520 --> 00:07:16,100 password, dhe kthimi. 114 00:07:16,100 --> 00:07:20,280 Pra, kjo loop, ndërsa do të iterate mbi të gjitha vargjet e mundshme. 115 00:07:20,280 --> 00:07:24,640 >> Nëse gjen ndonjë që kodon për string pritet koduar, ajo do të 116 00:07:24,640 --> 00:07:26,190 kthehen se fjalëkalimin. 117 00:07:26,190 --> 00:07:29,610 Dhe kjo nuk do të gjeni ndonjë gjë, atëherë ajo do të kthehet, shtypjen se ajo 118 00:07:29,610 --> 00:07:31,910 nuk ishte në gjendje për të gjetur ndonjë gjë. 119 00:07:31,910 --> 00:07:39,220 Tani, vini re se iterating mbi të gjitha vargjet e mundshme është ndoshta do të 120 00:07:39,220 --> 00:07:40,420 të marrë një kohë. 121 00:07:40,420 --> 00:07:43,590 Le të shohim se si në të vërtetë gjatë që merr. 122 00:07:43,590 --> 00:07:47,230 >> Le të bëjnë plas. 123 00:07:47,230 --> 00:07:51,050 E pra, oops - ai thotë se i papërcaktuar referenca për crypt. 124 00:07:51,050 --> 00:07:55,330 Pra mbani mend, për p përcakton dhe spekulim edhe faqja njeri për crypt se ne 125 00:07:55,330 --> 00:07:58,130 nevojë për të lidhur në dhomë e nëndheshme. 126 00:07:58,130 --> 00:08:01,130 Tani, parazgjedhur të bëjë komandë nuk e di se ju 127 00:08:01,130 --> 00:08:03,010 doni të përdorni këtë funksion. 128 00:08:03,010 --> 00:08:09,680 >> Pra, le të kopjoni këtë komandë klientit dhe vetëm të shtoni deri në fund 129 00:08:09,680 --> 00:08:13,300 e saj, Crypt lidh. 130 00:08:13,300 --> 00:08:14,820 Tani, ajo harton. 131 00:08:14,820 --> 00:08:23,880 Pra, le të kandidojë çarje në një të dhënë string i mbyllur - 132 00:08:23,880 --> 00:08:25,130 kështu që është e Cezarit. 133 00:08:25,130 --> 00:08:28,690 134 00:08:28,690 --> 00:08:30,790 Kështu që ishte shumë shpejt. 135 00:08:30,790 --> 00:08:33,230 >> Vini re se kjo përfundoi më 13. 136 00:08:33,230 --> 00:08:38,240 E pra, fjalëkalimi koduar i Cezarit; ndodh të jetë 13. 137 00:08:38,240 --> 00:08:41,650 Pra, le të provoni një tjetër fjalëkalim. 138 00:08:41,650 --> 00:08:45,830 Le të marrin koduar Hirschhorn-së fjalekalimin dhe provoni plasaritje se. 139 00:08:45,830 --> 00:08:51,750 140 00:08:51,750 --> 00:08:55,110 >> Pra, vini re se ne kemi arritur tashmë tre karaktere. 141 00:08:55,110 --> 00:08:58,660 Dhe ne jemi iterating mbi të gjitha të jetë e mundur tre-strings karakter. 142 00:08:58,660 --> 00:09:01,420 Kjo do të thotë që ne tashmë e kam përfunduar iterating mbi të gjitha një e mundshme dhe 143 00:09:01,420 --> 00:09:04,660 dy vargjet karakter. 144 00:09:04,660 --> 00:09:09,180 Tani, kjo duket si ky do të të marrë një kohë para se të arrijmë 145 00:09:09,180 --> 00:09:10,580 katër-karakter strings. 146 00:09:10,580 --> 00:09:14,680 Ajo mund të marrë disa minuta. 147 00:09:14,680 --> 00:09:16,055 >> Ajo nuk ka marrë një çift të minuta. 148 00:09:16,055 --> 00:09:18,450 Ne jemi në katër-karakter strings. 149 00:09:18,450 --> 00:09:22,800 Por tani, ne kemi nevojë për të iterate mbi të gjitha mundshme katër-karakter vargjet, të cilat 150 00:09:22,800 --> 00:09:26,000 që mund të marrë ndoshta 10 minuta. 151 00:09:26,000 --> 00:09:28,720 Dhe atëherë kur kemi arritur pesë karakterin vargjet, ne kemi nevojë për të iterate mbi të gjitha 152 00:09:28,720 --> 00:09:31,450 e atyre, të cilat mund të marrë një orë çift. 153 00:09:31,450 --> 00:09:34,080 Dhe ne kemi nevojë për të iterate mbi të gjitha të jetë e mundur Gjashtë-strings karakter, i cili 154 00:09:34,080 --> 00:09:36,560 mund të marrë disa ditë dhe kështu me radhë. 155 00:09:36,560 --> 00:09:41,380 >> Pra, ajo mund të marrë një kohë të gjatë potencialisht shumë koha për të iterate mbi të gjitha të jetë e mundur 156 00:09:41,380 --> 00:09:44,850 tetë-karakteri dhe vargjet më pak. 157 00:09:44,850 --> 00:09:50,600 Pra, vini re se kjo nuk është domosdoshmërisht një algorithm shumë efikas për gjetjen e 158 00:09:50,600 --> 00:09:51,860 një fjalëkalim. 159 00:09:51,860 --> 00:09:54,540 Ju mund të mendoni se nuk ka janë mënyra më të mira. 160 00:09:54,540 --> 00:10:02,230 Për shembull, ZYX fjalëkalimi! 32ab ndoshta nuk është një fjalëkalim shumë të zakonshme, 161 00:10:02,230 --> 00:10:06,440 ndërsa fjalëkalimi 12345 është ndoshta një shumë më të zakonshme. 162 00:10:06,440 --> 00:10:13,570 >> Pra, një mënyrë e duke u përpjekur për të gjetur një fjalëkalim më shpejt që është vetëm shikoni 163 00:10:13,570 --> 00:10:15,560 në fjalëkalimet që janë më të zakonshme. 164 00:10:15,560 --> 00:10:20,480 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ë 165 00:10:20,480 --> 00:10:24,860 ato fjalë si hamendjeve tona fjalëkalim. 166 00:10:24,860 --> 00:10:29,210 Tani, ndoshta një fjalëkalim nuk është kaq e thjeshtë. 167 00:10:29,210 --> 00:10:32,600 Ndoshta përdorues ishte disi i zgjuar dhe të përpiqemi për të bashkëngjitur një numër 168 00:10:32,600 --> 00:10:34,220 fundi i nje fjale. 169 00:10:34,220 --> 00:10:37,000 >> Pra, ndoshta fjalëkalimi tyre ishte password1. 170 00:10:37,000 --> 00:10:41,520 Kështu që ju mund të përpiquni të iterating mbi të gjitha fjalët ne fjalor me nje njërit 171 00:10:41,520 --> 00:10:43,210 bashkangjitur në fund të tij. 172 00:10:43,210 --> 00:10:47,360 Dhe pastaj ndoshta pas duke bërë që, ju do të append a dy në fund të tij. 173 00:10:47,360 --> 00:10:50,240 >> Apo ndoshta përdoruesi është duke u përpjekur të jetë edhe më i mençur, dhe ata duan tyre 174 00:10:50,240 --> 00:10:54,980 fjalëkalim për jetë "hacker", por ata janë të do të zëvendësojë të gjitha instancat e e e 175 00:10:54,980 --> 00:10:56,600 me threes. 176 00:10:56,600 --> 00:10:58,440 Kështu që ju mund të bëni këtë shumë. 177 00:10:58,440 --> 00:11:02,100 Iterate mbi të gjitha fjalët në fjalor por të zëvendësojë karaktere që 178 00:11:02,100 --> 00:11:04,790 duken si numra me ato numra. 179 00:11:04,790 --> 00:11:09,670 >> Pra këtë mënyrë, ju mund të arrijë edhe më shumë fjalëkalimet që janë mjaft të zakonshme. 180 00:11:09,670 --> 00:11:14,690 Por në fund, mënyra e vetme që ju mund të kapur të gjitha fjalëkalimet është shtazë 181 00:11:14,690 --> 00:11:17,340 detyrojë iterate mbi të gjitha vargjet e mundshme. 182 00:11:17,340 --> 00:11:22,100 Pra, në fund, ju keni nevojë për të iterate mbi të gjitha vargjet nga një karakter në 183 00:11:22,100 --> 00:11:28,110 tetë karaktere, të cilat mund të marrin një kohë shumë të gjatë, por ju duhet të bëni atë. 184 00:11:28,110 --> 00:11:30,024 >> Emri im është Rob Bowden. 185 00:11:30,024 --> 00:11:31,425 Dhe kjo është Crack. 186 00:11:31,425 --> 00:11:36,533