1 00:00:00,000 --> 00:00:13,000 2 00:00:13,000 --> 00:00:15,890 >> ROB BOWDEN: Ég er Rob og skulum fá sprunga. 3 00:00:15,890 --> 00:00:19,390 Svo muna frá pset sérstakur að við erum að fara að þurfa að nota 4 00:00:19,390 --> 00:00:20,890 Crypt virka. 5 00:00:20,890 --> 00:00:26,330 Fyrir man síðunnar, höfum við tvær kjötkássa skilgreina _xopensource. 6 00:00:26,330 --> 00:00:28,290 Ekki hafa áhyggjur af því hvers vegna við þurfum að gera það. 7 00:00:28,290 --> 00:00:31,550 Og einnig kjötkássa eru unistd.h. 8 00:00:31,550 --> 00:00:35,920 >> Svo þegar það er út af the vegur, við skulum fá til the raunverulegur program. 9 00:00:35,920 --> 00:00:39,570 Fyrsta sem við þurfum að gera er að ganga úr skugga um notandinn slegið gild dulkóðuð 10 00:00:39,570 --> 00:00:41,520 lykilorð á stjórn lína. 11 00:00:41,520 --> 00:00:46,050 Mundu að forritið er ætlast að keyra eins punktur slash sprunga, og 12 00:00:46,050 --> 00:00:48,120 þá dulkóðað band. 13 00:00:48,120 --> 00:00:52,990 >> Svo hér erum við að stöðva til að tryggja að að argc til tveggja ef við viljum 14 00:00:52,990 --> 00:00:54,380 halda áfram með the program. 15 00:00:54,380 --> 00:00:58,830 Ef argc er ekki tveir, sem þýðir annað hvort notandinn ekki inn dulkóðuð 16 00:00:58,830 --> 00:01:02,560 lykilorð á stjórn lína, eða þeir gert meira en bara að brengla 17 00:01:02,560 --> 00:01:05,379 lykilorð á stjórn lína, sem Ef við vitum ekki hvað ég á að gera við 18 00:01:05,379 --> 00:01:07,660 stjórn lína rifrildi. 19 00:01:07,660 --> 00:01:11,390 >> Svo ef argc var tveggja, getum við haldið áfram. 20 00:01:11,390 --> 00:01:14,160 Og hér erum við að fara að lýsa breytu dulkóðuð. 21 00:01:14,160 --> 00:01:17,650 Það er bara að fara að alias Upprunalega argv1 að svo um þetta 22 00:01:17,650 --> 00:01:20,690 program, höfum við ekki að kalla það argv1, sem þá verður þú að hugsa 23 00:01:20,690 --> 00:01:22,950 um hvað það í raun þýddi. 24 00:01:22,950 --> 00:01:27,180 >> Svo að lokum, við viljum að staðfesta að the brengla lykilorð sem notandinn 25 00:01:27,180 --> 00:01:30,840 inn hefði í raun verið dulkóðuð lykilorð. 26 00:01:30,840 --> 00:01:35,120 Per manninum síðu grafhvelfing, sem dulkóðað lykilorð verður að vera 13 27 00:01:35,120 --> 00:01:36,440 stafir að lengd. 28 00:01:36,440 --> 00:01:41,500 Upp hér, eftir því sem við kjötkássa skilgreind dulkóða lengd og 13. 29 00:01:41,500 --> 00:01:46,140 Þannig að við erum bara að gera úr skugga um að band lengd dulkóðuð 30 00:01:46,140 --> 00:01:49,090 lykilorð er 13.. 31 00:01:49,090 --> 00:01:52,280 >> Og ef það er ekki, viljum við til að loka forritinu. 32 00:01:52,280 --> 00:01:56,470 Svo þegar það er út af the vegur, getum við nú í raun að reyna að finna hvað 33 00:01:56,470 --> 00:02:00,410 lykilorð sem gaf dulkóðuð lykilorðið var. 34 00:02:00,410 --> 00:02:04,870 Hér viljum við að grípa salt frá the brengla lykilorð. 35 00:02:04,870 --> 00:02:08,930 Mundu, á man síðunnar, að Fyrstu tveir stafir dulkóðuð 36 00:02:08,930 --> 00:02:10,590 band, eins og hér - 37 00:02:10,590 --> 00:02:12,770 50ZPJ og svo framvegis - 38 00:02:12,770 --> 00:02:16,170 Fyrstu tveir stafir gefa solu salt sem var notaður 39 00:02:16,170 --> 00:02:18,080 í crypt virka. 40 00:02:18,080 --> 00:02:21,740 >> Og hér, sjá að við að saltið var ha. 41 00:02:21,740 --> 00:02:27,610 Þannig að við viljum að afrita fyrstu tvær stafir, salt lengd vera kjötkássa 42 00:02:27,610 --> 00:02:30,230 skilgreint sem tveir. 43 00:02:30,230 --> 00:02:35,970 Við verðum að afrita fyrstu tvo stafi í þessu fylki, salt. 44 00:02:35,970 --> 00:02:39,340 Takið eftir að við þurfum salt lengd auk einn, þar sem við þurfum enn null 45 00:02:39,340 --> 00:02:42,440 Ljúka við lok salts okkar. 46 00:02:42,440 --> 00:02:46,940 >> Þá erum við að fara að lýsa þessu fylki, gestur, af stærð max lengd auk 47 00:02:46,940 --> 00:02:51,930 einn, þar hámarkslengd er kjötkássa skilgreint eins og átta, þar sem hámarks aðgangsorð 48 00:02:51,930 --> 00:02:55,090 er átta stafir að lengd. 49 00:02:55,090 --> 00:02:59,860 Og við erum að fara að nota þetta til iterate yfir öllum mögulegum strengi sem gætu 50 00:02:59,860 --> 00:03:01,430 vera gild lykilorð. 51 00:03:01,430 --> 00:03:07,720 Svo ef gildar stafir í lykilorði voru bara a, b, og c, þá 52 00:03:07,720 --> 00:03:14,970 við myndum iterate yfir a, b, c, AA, BA, ca, og svo framvegis, þar til 53 00:03:14,970 --> 00:03:16,690 fáum við að sjá cccccccc - 54 00:03:16,690 --> 00:03:19,600 átta er c. 55 00:03:19,600 --> 00:03:23,620 >> Og ef við höfum ekki niður gild lykilorð, þá þurfum við að segja að 56 00:03:23,620 --> 00:03:26,590 brengla strengur var ekki gildir til að byrja með. 57 00:03:26,590 --> 00:03:29,970 Svo nú, ná við þetta en 1 lykkja. 58 00:03:29,970 --> 00:03:33,100 Takið það þýðir að það er óendanlega lykkju. 59 00:03:33,100 --> 00:03:36,430 >> Eftir því að það eru engin brot yfirlýsingu inni af þessum óendanlega lykkju. 60 00:03:36,430 --> 00:03:38,570 Það eru aftur aðeins yfirlýsingar. 61 00:03:38,570 --> 00:03:41,210 Þannig að við aldrei raunverulega von til að loka lykkja. 62 00:03:41,210 --> 00:03:44,750 Við reiknum bara til að loka forritinu. 63 00:03:44,750 --> 00:03:48,220 Ég hef bætt við þessa prenta yfirlýsingu um Efst á þessa lykkju til að bara prenta út 64 00:03:48,220 --> 00:03:51,790 hvað okkar núverandi giska á hvað lykilorðið er. 65 00:03:51,790 --> 00:03:53,630 >> Nú, hvað er þetta lykkja gera? 66 00:03:53,630 --> 00:03:58,330 Það er lykkja á öllum mögulegum strengi sem gæti verið gildar lykilorð. 67 00:03:58,330 --> 00:04:02,700 The fyrstur hlutur sem við erum að fara að gera er að taka núverandi giska okkar fyrir það sem 68 00:04:02,700 --> 00:04:03,920 lykilorð er. 69 00:04:03,920 --> 00:04:07,230 Við munum taka salt sem við grípa frá The brengla band, og við erum 70 00:04:07,230 --> 00:04:09,850 fara að dulkóða giska. 71 00:04:09,850 --> 00:04:14,760 Þetta mun gefa okkur dulkóðuð giska, sem við erum að fara að bera saman gegn 72 00:04:14,760 --> 00:04:18,810 sem dulkóðuðu band sem notandinn færð á stjórn lína. 73 00:04:18,810 --> 00:04:23,030 >> Ef þeir eru hinir sömu og í því tilviki band sambærileg mun skila núll, ef 74 00:04:23,030 --> 00:04:28,050 þeir sömu, giska þá var lykilorð sem mynda the brengla 75 00:04:28,050 --> 00:04:33,520 band, en í því tilviki að við getum prentað sem eins og lykilorð okkar og aftur. 76 00:04:33,520 --> 00:04:37,520 En ef þeir voru ekki á sama, að þýðir víst okkar var rangt. 77 00:04:37,520 --> 00:04:43,250 >> Og við viljum að iterate til næsta gild giska. 78 00:04:43,250 --> 00:04:46,410 Svo það er það sem þetta á meðan lykkja er að reyna að gera. 79 00:04:46,410 --> 00:04:51,760 Það er að fara að iterate giska okkar á næsta gild giska. 80 00:04:51,760 --> 00:04:56,080 Takið eftir að þegar við segjum að sérstakur karakter í giska okkar hefur 81 00:04:56,080 --> 00:05:01,770 náð hámarks tákn, sem upp hér er Hash skilgreint sem tilde, þar sem 82 00:05:01,770 --> 00:05:05,710 sem er stærsta ASCII gildi eðli að notandi getur slegið inn á 83 00:05:05,710 --> 00:05:11,210 lyklaborð, þegar eðli nær Max tákn, þá viljum við senda 84 00:05:11,210 --> 00:05:17,150 það aftur til lágmarks tákn, sem er pláss, aftur lægsta ASCII 85 00:05:17,150 --> 00:05:20,800 gildi tákn sem notandi getur inn á lyklaborðinu. 86 00:05:20,800 --> 00:05:22,940 >> Þannig að við erum að fara að setja það að lágmarki tákn. 87 00:05:22,940 --> 00:05:25,720 Og svo við erum að fara að fara í næstu karakter. 88 00:05:25,720 --> 00:05:28,730 Svo hvernig er getspár okkar fara að iterate? 89 00:05:28,730 --> 00:05:33,685 Jæja, ef gild stafir eru a, b, og c, þá ef við byrja með a, 90 00:05:33,685 --> 00:05:36,630 það mun kunnugt til B, verður það iterate til c. 91 00:05:36,630 --> 00:05:44,360 c er hámark tákn okkar, þannig að við munum setja C aftur til, lágmarks tákn. 92 00:05:44,360 --> 00:05:48,100 Og þá munum við iterate vísitölu að næsta staf. 93 00:05:48,100 --> 00:05:53,920 >> Þannig að ef upprunalega giska var c, næst eðli er að fara til vera the null 94 00:05:53,920 --> 00:05:55,560 Ljúka. 95 00:05:55,560 --> 00:06:00,670 Niður hér, eftir því hvort eðli að við viljum nú að 96 00:06:00,670 --> 00:06:04,690 vöxtur var null Terminator, þá erum við að fara að setja það til 97 00:06:04,690 --> 00:06:06,260 lágmarks tákn. 98 00:06:06,260 --> 00:06:11,431 Þannig að ef giska var c, þá okkar Ný giska er að fara að vera AA. 99 00:06:11,431 --> 00:06:16,050 Og ef upprunalega giska okkar var cccc, þá ný giska okkar 100 00:06:16,050 --> 00:06:18,380 er að fara að vera aaaaa. 101 00:06:18,380 --> 00:06:24,430 >> Svo þegar við náum hámarks band af tilteknu lengd, þá erum við 102 00:06:24,430 --> 00:06:29,090 að fara að innleiða að lágmarki band í næsta lengd, sem mun 103 00:06:29,090 --> 00:06:34,420 bara vera allir stafir á lágmarks tákn. 104 00:06:34,420 --> 00:06:36,970 Nú, hvað er þetta athuga að gera hér? 105 00:06:36,970 --> 00:06:42,780 Jæja, ef vísitalan flutt frá áttunda stafnum níu eðli - 106 00:06:42,780 --> 00:06:46,460 svo við bætum átta s C sem fyrri okkar giska - 107 00:06:46,460 --> 00:06:51,270 þá vísitölu er að fara að einblína á síðasta null Terminator af giska okkar 108 00:06:51,270 --> 00:06:57,990 array, sem er ekki ætlað að raunverulega er hægt að nota í lykilorðinu okkar. 109 00:06:57,990 --> 00:07:03,530 >> Þannig að ef við erum lögð áhersla á að síðustu null Terminator, þá höfum við ekki fundið 110 00:07:03,530 --> 00:07:07,750 lykilorð sem er í gildi með því að nota bara átta stafir, sem þýðir að það er engin 111 00:07:07,750 --> 00:07:10,550 gild lykilorð sem dulkóðar í uppgefið band. 112 00:07:10,550 --> 00:07:13,520 Og við þurfum að prenta það, segja við gátum ekki fundið gild 113 00:07:13,520 --> 00:07:16,100 lykilorð og aftur. 114 00:07:16,100 --> 00:07:20,280 Þannig að þetta á meðan lykkja er að fara að iterate yfir öllum mögulegum strengi. 115 00:07:20,280 --> 00:07:24,640 >> Ef það finnur einhverjar sem dulkóðar til ráð dulkóðuð band, mun það 116 00:07:24,640 --> 00:07:26,190 aftur þessi lykilorð. 117 00:07:26,190 --> 00:07:29,610 Og það er það ekki að finna neitt, þá það mun koma aftur, prentun það 118 00:07:29,610 --> 00:07:31,910 var ekki hægt að finna neitt. 119 00:07:31,910 --> 00:07:39,220 Nú, eftir að iterating yfir allt mögulegar strengir er líklega að fara að 120 00:07:39,220 --> 00:07:40,420 taka nokkurn tíma. 121 00:07:40,420 --> 00:07:43,590 Við skulum sjá í raun hvernig lengi tekur það. 122 00:07:43,590 --> 00:07:47,230 >> Skulum gera sprunga. 123 00:07:47,230 --> 00:07:51,050 Jæja, oops - það segir undefined tilvísun í Crypt. 124 00:07:51,050 --> 00:07:55,330 Svo man, fyrir p setur sérstakur og einnig maðurinn síðu fyrir Crypt sem við 125 00:07:55,330 --> 00:07:58,130 þarf að tengja í Crypt. 126 00:07:58,130 --> 00:08:01,130 Nú gera sjálfgefið stjórn veit ekki að þú 127 00:08:01,130 --> 00:08:03,010 vilt nota þessi aðgerð. 128 00:08:03,010 --> 00:08:09,680 >> Þannig að við skulum afrita Þessi viðskiptavinur skipun og bara bæta við á til enda 129 00:08:09,680 --> 00:08:13,300 af því, sem tengir Crypt. 130 00:08:13,300 --> 00:08:14,820 Nú safnar það. 131 00:08:14,820 --> 00:08:23,880 Svo skulum keyra sprunga á tilteknu dulkóðuð band - 132 00:08:23,880 --> 00:08:25,130 svo Keisarans. 133 00:08:25,130 --> 00:08:28,690 134 00:08:28,690 --> 00:08:30,790 Svo það var ansi hratt. 135 00:08:30,790 --> 00:08:33,230 >> Takið eftir að þetta endaði á 13.. 136 00:08:33,230 --> 00:08:38,240 Jæja, keisarans dulkóðuð lykilorð verður að vera 13. 137 00:08:38,240 --> 00:08:41,650 Svo skulum reyna annað lykilorð. 138 00:08:41,650 --> 00:08:45,830 Skulum taka dulkóðuð Hirschhorn er lykilorð og reyna sprunga það. 139 00:08:45,830 --> 00:08:51,750 140 00:08:51,750 --> 00:08:55,110 >> Svo taka við höfum þegar náð þrír stafir. 141 00:08:55,110 --> 00:08:58,660 Og við erum iterating yfir allt mögulegt þriggja eðli strengir. 142 00:08:58,660 --> 00:09:01,420 Það þýðir að við höfum klára þegar iterating yfir alla mögulega einn og 143 00:09:01,420 --> 00:09:04,660 tvö eðli strengir. 144 00:09:04,660 --> 00:09:09,180 Nú lítur það eins og þetta er að fara að taka nokkurn tíma áður en við ná 145 00:09:09,180 --> 00:09:10,580 fjögurra eðli strengir. 146 00:09:10,580 --> 00:09:14,680 Það gæti tekið nokkrar mínútur. 147 00:09:14,680 --> 00:09:16,055 >> Það ekki taka a par af mínúta. 148 00:09:16,055 --> 00:09:18,450 Við erum á fjögurra eðli strengi. 149 00:09:18,450 --> 00:09:22,800 En nú þurfum við að iterate yfir alla mögulegt fjögurra karakter strengir, sem 150 00:09:22,800 --> 00:09:26,000 sem gæti tekið kannski 10 mínútur. 151 00:09:26,000 --> 00:09:28,720 Og svo þegar við náum fimm staf strengir, þurfum við að iterate yfir alla 152 00:09:28,720 --> 00:09:31,450 af þeim, sem gætu taka nokkrar klukkustundir. 153 00:09:31,450 --> 00:09:34,080 Og við þurfum að iterate yfir allt mögulegt sex-stafa strengi, sem 154 00:09:34,080 --> 00:09:36,560 gæti tekið nokkra daga og svo framvegis. 155 00:09:36,560 --> 00:09:41,380 >> Svo það gæti tekið hugsanlega mjög löng tími til iterate yfir allt mögulegt 156 00:09:41,380 --> 00:09:44,850 átta eðli og færri strengi. 157 00:09:44,850 --> 00:09:50,600 Svo eftir því að þetta er ekki endilega mjög duglegur reiknirit til að finna 158 00:09:50,600 --> 00:09:51,860 lykilorð. 159 00:09:51,860 --> 00:09:54,540 Þú gætir held að það eru betri leiðir. 160 00:09:54,540 --> 00:10:02,230 Til dæmis, lykilorð zyx! 32ab sennilega er ekki mjög algeng lykilorð 161 00:10:02,230 --> 00:10:06,440 en lykilorðið 12345 er sennilega mikið meira sameiginlegt. 162 00:10:06,440 --> 00:10:13,570 >> Svo ein leið til að reyna að finna lykilorð hraðar er að bara horfa 163 00:10:13,570 --> 00:10:15,560 á lykilorð sem eru algengari. 164 00:10:15,560 --> 00:10:20,480 Svo til dæmis, við getum reynt að lesa orð frá orðabók og reyna alla 165 00:10:20,480 --> 00:10:24,860 þessi orð sem gátur lykilorð okkar. 166 00:10:24,860 --> 00:10:29,210 Nú, kannski lykilorð er ekki svo einfalt. 167 00:10:29,210 --> 00:10:32,600 Kannski notandinn var nokkuð snjall og reyna að auka við fjölda til 168 00:10:32,600 --> 00:10:34,220 enda orði. 169 00:10:34,220 --> 00:10:37,000 >> Svo kannski Aðgangsorðið var password1. 170 00:10:37,000 --> 00:10:41,520 Svo þú geta reyna iterating yfir öll orð í orðabókinni með einn 171 00:10:41,520 --> 00:10:43,210 bætt við lok þess. 172 00:10:43,210 --> 00:10:47,360 Og þá kannski eftir að gera það, munt þú auka tveggja til loka þess. 173 00:10:47,360 --> 00:10:50,240 >> Eða kannski notandinn er að reyna að vera jafnvel meira snjall, og þeir vilja þeirra 174 00:10:50,240 --> 00:10:54,980 lykilorð til að vera "tölvusnápur", en þeir eru að fara að skipta út öllum tilvikum af Tölvupóstfang 175 00:10:54,980 --> 00:10:56,600 með threes. 176 00:10:56,600 --> 00:10:58,440 Svo þú gætir gert þetta líka. 177 00:10:58,440 --> 00:11:02,100 Iterate yfir öll orð í orðabókinni en skipta stafi sem 178 00:11:02,100 --> 00:11:04,790 líta út eins og númer með þær tölur. 179 00:11:04,790 --> 00:11:09,670 >> Svo Þannig gætir þú skilið enn meira lykilorð sem eru nokkuð algeng. 180 00:11:09,670 --> 00:11:14,690 En að lokum, eina leiðin sem þú getur handtaka öll lykilorð er að skepna 181 00:11:14,690 --> 00:11:17,340 þvinga iterate yfir allt mögulegar strengir. 182 00:11:17,340 --> 00:11:22,100 Svo í lok, þú þarft að iterate yfir alla strengi frá einum staf til 183 00:11:22,100 --> 00:11:28,110 átta stafir, sem gæti tekið mjög langan tíma, en þú þarft að gera það. 184 00:11:28,110 --> 00:11:30,024 >> Mitt nafn er Rob Bowden. 185 00:11:30,024 --> 00:11:31,425 Og þetta er sprunga. 186 00:11:31,425 --> 00:11:36,533