1 00:00:00,000 --> 00:00:13,000 2 00:00:13,000 --> 00:00:15,890 >> ROB BOWDEN: Я Роб, і давайце парэпанне. 3 00:00:15,890 --> 00:00:19,390 Так што памятаеце з PSET спецыфікацыю, якая мы збіраемся быць неабходнасці выкарыстоўваць 4 00:00:19,390 --> 00:00:20,890 Склеп функцыі. 5 00:00:20,890 --> 00:00:26,330 Для чалавека, старонку, у нас ёсць два Хэш вызначыць _xopensource. 6 00:00:26,330 --> 00:00:28,290 Не турбуйцеся аб тым, чаму мы павінны зрабіць гэта. 7 00:00:28,290 --> 00:00:31,550 А таксама хэш ўключаюць unistd.h. 8 00:00:31,550 --> 00:00:35,920 >> Таму, як толькі гэта з шляху, давайце дабрацца да фактычнага праграмы. 9 00:00:35,920 --> 00:00:39,570 Першае, што нам трэба зрабіць, гэта пераканацца, што карыстач увёў сапраўдны зашыфраваны 10 00:00:39,570 --> 00:00:41,520 пароль у камандным радку. 11 00:00:41,520 --> 00:00:46,050 Памятаеце, што праграма павінна для выканання як расколіны кропка слэш, і 12 00:00:46,050 --> 00:00:48,120 Затым зашыфраваную радок. 13 00:00:48,120 --> 00:00:52,990 >> Дык вось мы правяраем, каб пераканацца, што ARGC да двух, калі мы хочам 14 00:00:52,990 --> 00:00:54,380 працягнуць праграму. 15 00:00:54,380 --> 00:00:58,830 Калі ARGC не два, гэта азначае, што альбо Карыстальнік не ўвёў зашыфраванае 16 00:00:58,830 --> 00:01:02,560 пароль у камандным радку, альбо яны ўведзена больш, чым проста зашыфраваных 17 00:01:02,560 --> 00:01:05,379 пароль у камандным радку, у якой выпадку мы не ведаем, што рабіць з 18 00:01:05,379 --> 00:01:07,660 аргументы каманднага радка. 19 00:01:07,660 --> 00:01:11,390 >> Так што калі ARGC было два гады, мы можам працягваць. 20 00:01:11,390 --> 00:01:14,160 І вось, мы збіраемся аб'явіць Невялікі зашыфраваныя. 21 00:01:14,160 --> 00:01:17,650 Гэта проста будзе арыгінальным псеўданімам argv1 так, што на працягу ўсяго гэтага 22 00:01:17,650 --> 00:01:20,690 праграмы, мы не павінны называць яго argv1, якія затым вы павінны думаць 23 00:01:20,690 --> 00:01:22,950 аб тым, што, што на самой справе меў на ўвазе. 24 00:01:22,950 --> 00:01:27,180 >> Такім чынам, нарэшце, мы хочам праверыць, што зашыфраваны пароль карыстальніка 25 00:01:27,180 --> 00:01:30,840 ўступіў маглі на самай справе было зашыфраваны пароль. 26 00:01:30,840 --> 00:01:35,120 На старонцы кіраўніцтва склеп, зашыфраваны пароль павінен быць 13 27 00:01:35,120 --> 00:01:36,440 знакаў. 28 00:01:36,440 --> 00:01:41,500 Тут, наверсе, мы заўважылі, што хэш вызначаны шыфравання даўжынёй як 13. 29 00:01:41,500 --> 00:01:46,140 Так што мы толькі пераканаўшыся, што даўжыня радка зашыфраваных 30 00:01:46,140 --> 00:01:49,090 пароль 13. 31 00:01:49,090 --> 00:01:52,280 >> А калі гэта не так, мы хочам Для выхаду з праграмы. 32 00:01:52,280 --> 00:01:56,470 Таму, як толькі гэта з шляху, мы можам Зараз на самой справе спрабуюць знайсці тое, што 33 00:01:56,470 --> 00:02:00,410 пароль, які даў зашыфраваных пароль быў. 34 00:02:00,410 --> 00:02:04,870 Тут, мы хочам, каб захапіць солі з зашыфраванага пароля. 35 00:02:04,870 --> 00:02:08,930 Памятаеце, што за чалавек старонцы, што Першыя два знака зашыфраванай 36 00:02:08,930 --> 00:02:10,590 радком, як тут - 37 00:02:10,590 --> 00:02:12,770 50ZPJ і гэтак далей - 38 00:02:12,770 --> 00:02:16,170 Першыя два знака даюць нам соль, які быў выкарыстаны 39 00:02:16,170 --> 00:02:18,080 у склепе функцыі. 40 00:02:18,080 --> 00:02:21,740 >> І вось, мы бачым, што соль была га. 41 00:02:21,740 --> 00:02:27,610 Таму мы хочам, каб скапіяваць першыя два знакаў, соль даўжыня складае хэш 42 00:02:27,610 --> 00:02:30,230 вызначаецца як два. 43 00:02:30,230 --> 00:02:35,970 Мы павінны скапіяваць першыя два знака У гэты масіў, соль. 44 00:02:35,970 --> 00:02:39,340 Звярніце ўвагу, што нам патрэбна соль даўжынёй плюс Адзін з іх, так як мы ўсё яшчэ спатрэбіцца нуль 45 00:02:39,340 --> 00:02:42,440 тэрмінатар у канцы нашай солі. 46 00:02:42,440 --> 00:02:46,940 >> Затым мы збіраемся аб'явіць гэты масіў, госць, памерам даўжынёй макс плюс 47 00:02:46,940 --> 00:02:51,930 Адзін з іх, дзе максімальная даўжыня хэш вызначаны да васьмі, так як максімальную пароль 48 00:02:51,930 --> 00:02:55,090 займае восем знакаў. 49 00:02:55,090 --> 00:02:59,860 І мы збіраемся выкарыстаць гэта, каб ітэрацыі па ўсіх магчымых радкі, якія маглі 50 00:02:59,860 --> 00:03:01,430 сапраўднымі паролямі. 51 00:03:01,430 --> 00:03:07,720 Так што, калі дапушчальныя сімвалы у паролі былі проста A, B, і C, то 52 00:03:07,720 --> 00:03:14,970 мы б перабраць, B, C, AA, BA, CA, і гэтак далей, да 53 00:03:14,970 --> 00:03:16,690 Мы ўбачым CCCCCCCC - 54 00:03:16,690 --> 00:03:19,600 восем Сі. 55 00:03:19,600 --> 00:03:23,620 >> І калі ў нас ёсць не ўніз сапраўднае пароль, то мы павінны сказаць, што 56 00:03:23,620 --> 00:03:26,590 зашыфраванай радкі не было сапраўдныя з самага пачатку. 57 00:03:26,590 --> 00:03:29,970 Так што цяпер, мы дасягнем гэтага ў той час як 1 пятлю. 58 00:03:29,970 --> 00:03:33,100 Звярніце ўвагу, што азначае, што гэта бясконцы цыкл. 59 00:03:33,100 --> 00:03:36,430 >> Звярніце ўвагу, няма перапынку заяву ўнутры гэтага бясконцага цыклу. 60 00:03:36,430 --> 00:03:38,570 Там толькі вярнуць справаздачнасці. 61 00:03:38,570 --> 00:03:41,210 Такім чынам, мы ніколі не чакалі выйсці з цыклу. 62 00:03:41,210 --> 00:03:44,750 Мы толькі чакаем выхаду праграмы. 63 00:03:44,750 --> 00:03:48,220 Я дадаў гэтую пячатку заяву верхняй часткі гэтага цыклу проста раздрукаваць 64 00:03:48,220 --> 00:03:51,790 тое, што нашы бягучыя здагадвацца што пароль. 65 00:03:51,790 --> 00:03:53,630 >> Цяпер, што гэтая пятля робіць? 66 00:03:53,630 --> 00:03:58,330 Гэта цыкл па ўсіх магчымых радкоў якія могуць быць сапраўдным паролі. 67 00:03:58,330 --> 00:04:02,700 Першае, што мы збіраемся зрабіць, гэта ўзяць нашы бягучыя здагадкі за тое, што 68 00:04:02,700 --> 00:04:03,920 пароль. 69 00:04:03,920 --> 00:04:07,230 Мы возьмем солі, што мы схапілі зашыфраваную радок, і мы 70 00:04:07,230 --> 00:04:09,850 збіраецца шыфраваць здагадку. 71 00:04:09,850 --> 00:04:14,760 Гэта дасць нам зашыфраванае Guess, якія мы збіраемся для параўнання 72 00:04:14,760 --> 00:04:18,810 зашыфраванай радкі, якія карыстальнік ўвесці ў камандную радок. 73 00:04:18,810 --> 00:04:23,030 >> Калі яны аднолькавыя, і ў гэтым выпадку Радок супастаўных верне нуль, калі 74 00:04:23,030 --> 00:04:28,050 яны тое ж самае, то думаю, было паролем, які генеруецца зашыфраваны 75 00:04:28,050 --> 00:04:33,520 Радок, у гэтым выпадку мы можам надрукаваць што наш пароль і вяртанне. 76 00:04:33,520 --> 00:04:37,520 Але калі б яны былі не тое ж самае, што азначае, што наша здагадка было няслушным. 77 00:04:37,520 --> 00:04:43,250 >> І мы хочам, каб ітэрацыі наступнага сапраўднага здагадку. 78 00:04:43,250 --> 00:04:46,410 Дык вось што гэта ў той час Цыкл спрабуе зрабіць. 79 00:04:46,410 --> 00:04:51,760 Гэта збіраецца пацвярджаем нашу здагадку да бліжэйшага дапушчальнага здагадку. 80 00:04:51,760 --> 00:04:56,080 Звярніце ўвагу, што, калі мы кажам, што асаблівы характар ​​у нашай здагадцы 81 00:04:56,080 --> 00:05:01,770 дасягнулі сімвалам Max, якая тут з'яўляецца хэш вызначаецца як тыльды, так як 82 00:05:01,770 --> 00:05:05,710 гэта самы буйны ASCII значэнне сімвала , Якія карыстальнік можа ўвесці ў 83 00:05:05,710 --> 00:05:11,210 клавіятура, калі персанаж дасягае макс сімвал, то мы хочам паслаць 84 00:05:11,210 --> 00:05:17,150 яго назад у сімвал мінімальнага, якое гэта прастора, зноў жа самы нізкі ASCII 85 00:05:17,150 --> 00:05:20,800 значэнне сімвала, які карыстальнік можа увядзіце з клавіятуры. 86 00:05:20,800 --> 00:05:22,940 >> Такім чынам, мы збіраемся ўсталяваць, што да мінімальнага знака. 87 00:05:22,940 --> 00:05:25,720 А потым мы збіраемся пайсці на наступны характар. 88 00:05:25,720 --> 00:05:28,730 Так як жа нашы здагадкі збіраецца ітэрацыі? 89 00:05:28,730 --> 00:05:33,685 Ну, калі дазваляецца выкарыстоўваць сімвалы A, B, і С, то, калі мы пачалі з, 90 00:05:33,685 --> 00:05:36,630 гэта будзе ітэрацыі б, гэта будзе ітэрацыі да с. 91 00:05:36,630 --> 00:05:44,360 З нашага макс сімвал, таму мы ўсталюем Вярнуцца да C, мінімальная сімвалам. 92 00:05:44,360 --> 00:05:48,100 І тады мы ітэрацыі індэкс да наступнага знаку. 93 00:05:48,100 --> 00:05:53,920 >> Такім чынам, калі зыходнае здагадка было с, наступнага характар ​​будзе нулявым 94 00:05:53,920 --> 00:05:55,560 тэрмінатара. 95 00:05:55,560 --> 00:06:00,670 Тут, унізе, заўважыў, што калі знак што мы зараз хочам 96 00:06:00,670 --> 00:06:04,690 прырост склаў нулявы тэрмінатар, Затым мы збіраемся ўсталяваць яго на 97 00:06:04,690 --> 00:06:06,260 сімвал мінімальнага. 98 00:06:06,260 --> 00:06:11,431 Такім чынам, калі здагадка было C, то наша новая здагадка будзе АА. 99 00:06:11,431 --> 00:06:16,050 І калі наша здагадка было арыгінальным КПКГ, то наша новая здагадка 100 00:06:16,050 --> 00:06:18,380 будзе ааааа. 101 00:06:18,380 --> 00:06:24,430 >> Таму, калі мы дасягаем максімальнай радкі зададзенай даўжыні, то мы 102 00:06:24,430 --> 00:06:29,090 мае намер рэалізаваць да мінімальнай радком чарговага даўжыню, якая будзе 103 00:06:29,090 --> 00:06:34,420 проста ўсе знакі мінімальны знак. 104 00:06:34,420 --> 00:06:36,970 Цяпер, што гэтая праверка тут робіш? 105 00:06:36,970 --> 00:06:42,780 Ну, калі індэкс пераехаў з восьмага характару да дзевяці характару - 106 00:06:42,780 --> 00:06:46,460 таму мы дадамо восем C як нашы папярэднія адгадаць - 107 00:06:46,460 --> 00:06:51,270 Затым індэкс збіраецца засяродзіцца на апошні нулявой сімвал нашага здагадкі 108 00:06:51,270 --> 00:06:57,990 масіва, які не прызначаны, каб фактычна выкарыстоўвацца ў нашай пароля. 109 00:06:57,990 --> 00:07:03,530 >> Так што, калі мы сканцэнтраваны на тым апошнім нулявым тэрмінатар, то мы не знайшлі 110 00:07:03,530 --> 00:07:07,750 пароль, сапраўдны выкарыстоўваючы толькі восем знакаў, што азначае няма 111 00:07:07,750 --> 00:07:10,550 правільны пароль, які шыфруе ў дадзенай радку. 112 00:07:10,550 --> 00:07:13,520 І ў нас ёсць для друку, што, кажучы мы не маглі знайсці сапраўдную 113 00:07:13,520 --> 00:07:16,100 пароль і вяртання. 114 00:07:16,100 --> 00:07:20,280 Так што гэта пакуль пятля збіраецца ітэрацыі па ўсіх магчымых радкоў. 115 00:07:20,280 --> 00:07:24,640 >> Калі яна знаходзіць любыя, які шыфруе да Чакаецца зашыфраваную радок, ён будзе 116 00:07:24,640 --> 00:07:26,190 вярнуць гэты пароль. 117 00:07:26,190 --> 00:07:29,610 І ён не знаходзіць нічога, то ён вернецца, друк, што яна 118 00:07:29,610 --> 00:07:31,910 не змог нічога знайсці. 119 00:07:31,910 --> 00:07:39,220 Зараз, звярніце ўвагу, што перабірае ўсе Магчымыя радкі, верагодна, будзе 120 00:07:39,220 --> 00:07:40,420 заняць некаторы час. 121 00:07:40,420 --> 00:07:43,590 Давайце паглядзім, як на самой справе доўга, што бярэ. 122 00:07:43,590 --> 00:07:47,230 >> Давайце зробім расколіну. 123 00:07:47,230 --> 00:07:51,050 Ну, ой - гэта кажа пра нявызначаных спасылка на склеп. 124 00:07:51,050 --> 00:07:55,330 Так што памятаеце, для р ўсталёўвае спецыфікацыі і Таксама ў даведачнай старонцы склепе, што мы 125 00:07:55,330 --> 00:07:58,130 трэба звязаць у склепе. 126 00:07:58,130 --> 00:08:01,130 Цяпер, выкарыстоўваецца па змаўчанні камандай не ведаю, што вы 127 00:08:01,130 --> 00:08:03,010 хочаце выкарыстоўваць гэтую функцыю. 128 00:08:03,010 --> 00:08:09,680 >> Так давайце скапіюем гэтую каманду кліента і проста дадаць да канца 129 00:08:09,680 --> 00:08:13,300 яго, звязваючы склеп. 130 00:08:13,300 --> 00:08:14,820 Зараз, ён кампілюе. 131 00:08:14,820 --> 00:08:23,880 Так што давайце працаваць расколіны на дадзеным зашыфраваную радок - 132 00:08:23,880 --> 00:08:25,130 так Цэзара. 133 00:08:25,130 --> 00:08:28,690 134 00:08:28,690 --> 00:08:30,790 Так што было даволі хутка. 135 00:08:30,790 --> 00:08:33,230 >> Звярніце ўвагу, што гэта скончылася на 13. 136 00:08:33,230 --> 00:08:38,240 Ну, зашыфраваны пароль Цэзара здараецца, 13. 137 00:08:38,240 --> 00:08:41,650 Так давайце паспрабуем іншы пароль. 138 00:08:41,650 --> 00:08:45,830 Давайце зашыфраваных Hirschhorn аўтара пароль і паспрабуйце парэпання, што. 139 00:08:45,830 --> 00:08:51,750 140 00:08:51,750 --> 00:08:55,110 >> Так, заўважце, мы ўжо дасягнулі тры знака. 141 00:08:55,110 --> 00:08:58,660 І мы перабірае ўсе магчымыя тры-знакавыя радка. 142 00:08:58,660 --> 00:09:01,420 Гэта азначае, што мы ўжо скончыць перабірае ўсе магчымыя і 143 00:09:01,420 --> 00:09:04,660 два радкі знакаў. 144 00:09:04,660 --> 00:09:09,180 Цяпер, падобна, што гэта будзе заняць некаторы час, перш чым мы дасягнем 145 00:09:09,180 --> 00:09:10,580 чатыры-знакавыя радка. 146 00:09:10,580 --> 00:09:14,680 Гэта можа заняць некалькі хвілін. 147 00:09:14,680 --> 00:09:16,055 >> Гэта не зойме пару хвілін. 148 00:09:16,055 --> 00:09:18,450 Мы на чатыры-знакавыя радка. 149 00:09:18,450 --> 00:09:22,800 Але цяпер, мы павінны перабрацца ўсе магчымыя чатыры радкі знакаў, якія 150 00:09:22,800 --> 00:09:26,000 , Што можа быць, можа заняць 10 хвілін. 151 00:09:26,000 --> 00:09:28,720 А потым, калі мы дасягаем пяці знакаў радкоў, мы павінны перабрацца ўсе 152 00:09:28,720 --> 00:09:31,450 з тых, якія маглі б заняць некалькі гадзін. 153 00:09:31,450 --> 00:09:34,080 І мы павінны перабраць усе магчымыя шасці знакаў радкі, якія 154 00:09:34,080 --> 00:09:36,560 можа заняць некалькі дзён, і гэтак далей. 155 00:09:36,560 --> 00:09:41,380 >> Так што гэта можа заняць патэнцыйна вельмі доўга Час для перабору ўсіх магчымых 156 00:09:41,380 --> 00:09:44,850 васьмі знакаў і менш радкоў. 157 00:09:44,850 --> 00:09:50,600 Так заўважыць, што гэта не абавязкова вельмі эфектыўны алгарытм для пошуку 158 00:09:50,600 --> 00:09:51,860 пароля. 159 00:09:51,860 --> 00:09:54,540 Можна падумаць, што там больш эфектыўныя спосабы. 160 00:09:54,540 --> 00:10:02,230 Напрыклад, пароль ZYX! 32ab , Верагодна, не вельмі распаўсюджанае пароль, 161 00:10:02,230 --> 00:10:06,440 у той час як пароль 12345 верагодна, нашмат больш агульнага. 162 00:10:06,440 --> 00:10:13,570 >> Так адзін з спосабаў спрабуе знайсці пароль хутчэй, каб проста глядзець 163 00:10:13,570 --> 00:10:15,560 на паролі, якія з'яўляюцца больш распаўсюджанымі. 164 00:10:15,560 --> 00:10:20,480 Так, напрыклад, мы можам паспрабаваць прачытаць словы з слоўніка і паспрабаваць усё 165 00:10:20,480 --> 00:10:24,860 гэтыя словы, як нашы здагадкі пароля. 166 00:10:24,860 --> 00:10:29,210 Зараз, магчыма пароль не ўсё так проста. 167 00:10:29,210 --> 00:10:32,600 Можа быць, карыстальніку было некалькі разумных і паспрабуйце дадаць нумар 168 00:10:32,600 --> 00:10:34,220 Да канца слове. 169 00:10:34,220 --> 00:10:37,000 >> Таму, магчыма, іх было password1 пароль. 170 00:10:37,000 --> 00:10:41,520 Такім чынам, вы можаце паспрабаваць перабірае ўсе словы ў слоўніку з адным 171 00:10:41,520 --> 00:10:43,210 дадаецца ў канцы. 172 00:10:43,210 --> 00:10:47,360 І тады, магчыма, пасля выканання гэтага, вы далучыць два канцы яго. 173 00:10:47,360 --> 00:10:50,240 >> Ці, можа быць карыстальнік спрабуе быць нават больш разумнымі, і яны хочуць, каб іх 174 00:10:50,240 --> 00:10:54,980 паролем, каб быць "хакерам", але яны збіраецца замяніць усе асобнікі Чысцільшчыкі 175 00:10:54,980 --> 00:10:56,600 з тройкамі. 176 00:10:56,600 --> 00:10:58,440 Так што вы можаце гэта рабіць. 177 00:10:58,440 --> 00:11:02,100 Перабору ўсіх слоў у слоўніку але замяніць сімвалы, якія 178 00:11:02,100 --> 00:11:04,790 падобныя на лічбы з гэтымі лічбамі. 179 00:11:04,790 --> 00:11:09,670 >> Так што такім чынам, вы маглі б злавіць яшчэ больш пароляў, якія сустракаюцца даволі часта. 180 00:11:09,670 --> 00:11:14,690 Але ў рэшце рэшт, толькі так вы можаце захапіць усе паролі грубай 181 00:11:14,690 --> 00:11:17,340 прымусіць перабору ўсіх Магчымыя радка. 182 00:11:17,340 --> 00:11:22,100 Такім чынам, у рэшце рэшт, вам трэба ітэрацыі над усімі радкамі ад аднаго персанажа да 183 00:11:22,100 --> 00:11:28,110 васьмі знакаў, якая можа заняць вельмі доўгі час, але вы павінны гэта зрабіць. 184 00:11:28,110 --> 00:11:30,024 >> Мяне клічуць Боб Боуден. 185 00:11:30,024 --> 00:11:31,425 І гэта расколіну. 186 00:11:31,425 --> 00:11:36,533