1 00:00:00,000 --> 00:00:13,000 2 00:00:13,000 --> 00:00:15,890 >> ROB BOWDEN: Én Rob, és menjünk repedés. 3 00:00:15,890 --> 00:00:19,390 Úgy emlékszem a Pset spec hogy mi lesz szüksége, hogy használja a 4 00:00:19,390 --> 00:00:20,890 kripta funkciót. 5 00:00:20,890 --> 00:00:26,330 A man oldal, van két hash meg _xopensource. 6 00:00:26,330 --> 00:00:28,290 Ne aggódj, miért meg kell csinálni. 7 00:00:28,290 --> 00:00:31,550 És azt is hash tartalmaz unistd.h. 8 00:00:31,550 --> 00:00:35,920 >> Tehát, ha ez az útból, nézzük kap az aktuális program. 9 00:00:35,920 --> 00:00:39,570 Az első dolog, amit meg kell tennie, hogy megbizonyosodjon arról, a felhasználó által megadott érvényes titkosított 10 00:00:39,570 --> 00:00:41,520 jelszót a parancssorba. 11 00:00:41,520 --> 00:00:46,050 Ne feledje, hogy a program kellene kell futtatni, mint a dot slash crack, és 12 00:00:46,050 --> 00:00:48,120 majd titkosított szöveg. 13 00:00:48,120 --> 00:00:52,990 >> Tehát itt vagyunk Ellenőrizzük, hogy hogy argc két, ha azt akarjuk, hogy 14 00:00:52,990 --> 00:00:54,380 folytassa a programot. 15 00:00:54,380 --> 00:00:58,830 Ha argc nem két, az azt jelenti, vagy a felhasználó nem adja meg a titkosított 16 00:00:58,830 --> 00:01:02,560 jelszót a parancssorba, vagy be több, mint a titkosított 17 00:01:02,560 --> 00:01:05,379 jelszót a parancssorba, amelyben az esetben nem tudom, mi köze van a 18 00:01:05,379 --> 00:01:07,660 parancssori paramétereket. 19 00:01:07,660 --> 00:01:11,390 >> Tehát, ha már két argc, folytatni tudjuk. 20 00:01:11,390 --> 00:01:14,160 És itt fogunk nyilatkozni változó titkosított. 21 00:01:14,160 --> 00:01:17,650 Ez csak megy, alias az eredeti argv1 így ez alatt a 22 00:01:17,650 --> 00:01:20,690 programot, akkor nem kell nevezni argv1, amely akkor meg kell gondolni 23 00:01:20,690 --> 00:01:22,950 arról, hogy ez mit jelent valójában. 24 00:01:22,950 --> 00:01:27,180 >> Így végül, szeretnénk ellenőrizni, hogy a a titkosított jelszó a felhasználó 25 00:01:27,180 --> 00:01:30,840 be lehetett ténylegesen titkosított jelszót. 26 00:01:30,840 --> 00:01:35,120 Per a man oldalt a kripta, a titkosított jelszó kell 13 27 00:01:35,120 --> 00:01:36,440 karakter hosszú lehet. 28 00:01:36,440 --> 00:01:41,500 Itt fenn, észre, hogy hash meghatározott titkosítani hosszúságú 13. 29 00:01:41,500 --> 00:01:46,140 Szóval most ügyelve arra, hogy a húr hossza a titkosított 30 00:01:46,140 --> 00:01:49,090 jelszó 13. 31 00:01:49,090 --> 00:01:52,280 >> És ha ez nem, akkor szeretnénk A kilépéshez. 32 00:01:52,280 --> 00:01:56,470 Tehát, ha ez az útból, akkor most már valóban meg kell találnia, mi a 33 00:01:56,470 --> 00:02:00,410 jelszót adta a titkosított jelszó volt. 34 00:02:00,410 --> 00:02:04,870 Itt szeretnénk megragadni a só A titkosított jelszó. 35 00:02:04,870 --> 00:02:08,930 Ne feledje, egy a man oldalt, hogy a első két karakter a titkosított 36 00:02:08,930 --> 00:02:10,590 string, mint itt - 37 00:02:10,590 --> 00:02:12,770 50ZPJ és így tovább - 38 00:02:12,770 --> 00:02:16,170 Az első két karakter küld nekünk a só, hogy használták 39 00:02:16,170 --> 00:02:18,080 a kriptában funkciót. 40 00:02:18,080 --> 00:02:21,740 >> És itt, azt látjuk, hogy a só ha. 41 00:02:21,740 --> 00:02:27,610 Tehát szeretnénk másolni az első két karakterekből só hossza pedig hash 42 00:02:27,610 --> 00:02:30,230 meghatározni, mint kettő. 43 00:02:30,230 --> 00:02:35,970 Meg kell másolni az első két karakter ebbe a tömb, só. 44 00:02:35,970 --> 00:02:39,340 Figyeljük meg, hogy szükségünk van só hossza plusz egy, mert még mindig szükség van a null 45 00:02:39,340 --> 00:02:42,440 terminátor végén mi sót. 46 00:02:42,440 --> 00:02:46,940 >> Ezután fogjuk bejelenteni tömb, vendég, a méret max hossza plusz 47 00:02:46,940 --> 00:02:51,930 egy, ahol a maximális hossza hash meghatározott nyolc, mivel a maximális jelszó 48 00:02:51,930 --> 00:02:55,090 nyolc karakter hosszú. 49 00:02:55,090 --> 00:02:59,860 És fogjuk használni ezt hajtogat az összes lehetséges karakterek, amelyek 50 00:02:59,860 --> 00:03:01,430 érvényes jelszavakat. 51 00:03:01,430 --> 00:03:07,720 Tehát, ha az érvényes karakterek a jelszót voltak csak a, b, és c, akkor 52 00:03:07,720 --> 00:03:14,970 mi lenne iterálása a, b, c, AA, BA, CA, és így tovább, mindaddig, amíg 53 00:03:14,970 --> 00:03:16,690 megkapjuk, hogy cccccccc - 54 00:03:16,690 --> 00:03:19,600 nyolc c években. 55 00:03:19,600 --> 00:03:23,620 >> És ha még nem le érvényes jelszót, akkor meg kell mondani, hogy a 56 00:03:23,620 --> 00:03:26,590 titkosított szöveg nem volt érvényes kezdeni. 57 00:03:26,590 --> 00:03:29,970 Tehát most, hogy elérjük ezt a közben 1 hurok. 58 00:03:29,970 --> 00:03:33,100 Figyeljük meg, hogy azt jelenti, hogy végtelen ciklusba. 59 00:03:33,100 --> 00:03:36,430 >> Figyeljük nincs break utasítással belül ez a végtelen ciklus. 60 00:03:36,430 --> 00:03:38,570 Csak vissza nyilatkozatok. 61 00:03:38,570 --> 00:03:41,210 Tehát soha nem számítunk hogy kilépjen a ciklusból. 62 00:03:41,210 --> 00:03:44,750 Csak várják, hogy kilép a programból. 63 00:03:44,750 --> 00:03:48,220 Adtam ezt print nyilatkozatot a Ráadásul a hurok, hogy csak ki kell nyomtatni 64 00:03:48,220 --> 00:03:51,790 amit a jelenlegi kitalálni mi a jelszó. 65 00:03:51,790 --> 00:03:53,630 >> Nos, mi ez a loop csinálsz? 66 00:03:53,630 --> 00:03:58,330 Ez az összes hurok lehetséges karakterek amely érvényes jelszavakat. 67 00:03:58,330 --> 00:04:02,700 Az első dolog, amit csinálunk az hogy a jelenlegi kitalálni, amit a 68 00:04:02,700 --> 00:04:03,920 jelszó. 69 00:04:03,920 --> 00:04:07,230 Elvisszük a só, hogy megragadta a titkosított szöveg, és mi 70 00:04:07,230 --> 00:04:09,850 majd, hogy titkosítja a találgatás. 71 00:04:09,850 --> 00:04:14,760 Ez ad nekünk egy titkosított hiszem, amely fogunk összehasonlítani 72 00:04:14,760 --> 00:04:18,810 A titkosított szöveg, hogy a felhasználó lépett be a parancssorba. 73 00:04:18,810 --> 00:04:23,030 >> Amennyiben azok azonosak, amely esetben sztring hasonló nullát fog visszaadni, ha 74 00:04:23,030 --> 00:04:28,050 ők ugyanaz, akkor gondolom az volt a jelszót generált a titkosított 75 00:04:28,050 --> 00:04:33,520 string, ebben az esetben tudunk nyomtatni hogy mivel a jelszavát, majd vissza. 76 00:04:33,520 --> 00:04:37,520 De ha nem volt azonos, hogy a azt hiszem mi helytelen. 77 00:04:37,520 --> 00:04:43,250 >> És szeretnénk megismételni a a következő érvényes hiszem. 78 00:04:43,250 --> 00:04:46,410 Szóval, ez az, amit ez a közben hurok akar csinálni. 79 00:04:46,410 --> 00:04:51,760 Ez lesz megismételni a kitalálni a következő érvényes hiszem. 80 00:04:51,760 --> 00:04:56,080 Figyeljük meg, hogy amikor azt mondjuk, hogy a adott karakter a mi hiszem van 81 00:04:56,080 --> 00:05:01,770 elérte a max szimbólum, ami itt a hash definíció szerint a tilde, hiszen 82 00:05:01,770 --> 00:05:05,710 ez a legnagyobb érték ASCII karakter hogy a felhasználó megadhatja a 83 00:05:05,710 --> 00:05:11,210 billentyűzet, ha a karakter eléri a max szimbólum, akkor szeretnénk küldeni 84 00:05:11,210 --> 00:05:17,150 vissza a minimum szimbólum, amely egy tér, ismét a legalacsonyabb ASCII 85 00:05:17,150 --> 00:05:20,800 érték szimbólum, a felhasználó adjon meg a billentyűzetet. 86 00:05:20,800 --> 00:05:22,940 >> Így fogjuk beállítani, hogy az A minimum szimbólum. 87 00:05:22,940 --> 00:05:25,720 És akkor fogunk menni hogy a következő karakter. 88 00:05:25,720 --> 00:05:28,730 Hogy vannak a találgatások fog hajtogat? 89 00:05:28,730 --> 00:05:33,685 Nos, ha az érvényes karakterek a, b, és c, majd ha kezdődött, 90 00:05:33,685 --> 00:05:36,630 akkor az hajtogat, hogy b, akkor az hajtogat a c. 91 00:05:36,630 --> 00:05:44,360 c mi max szimbólum, úgyhogy majd meg c vissza, a minimum szimbólum. 92 00:05:44,360 --> 00:05:48,100 És aztán hajtogat index a következő karakterre. 93 00:05:48,100 --> 00:05:53,920 >> Tehát, ha az eredeti becslés volt c, a következő karakter lesz a null 94 00:05:53,920 --> 00:05:55,560 terminátor. 95 00:05:55,560 --> 00:06:00,670 Itt lent, észre, hogy ha a karakter hogy most szeretnénk 96 00:06:00,670 --> 00:06:04,690 növekmény a null terminátor, akkor fogjuk beállítani, hogy a 97 00:06:04,690 --> 00:06:06,260 minimum szimbólum. 98 00:06:06,260 --> 00:06:11,431 Tehát, ha a becslés volt c, akkor a új hiszem lesz aa. 99 00:06:11,431 --> 00:06:16,050 És, ha az eredeti becslés volt cccc, akkor az új becslés 100 00:06:16,050 --> 00:06:18,380 lesz aaaaa. 101 00:06:18,380 --> 00:06:24,430 >> Tehát, ha elérjük a maximális string- egy adott hosszúságú, akkor vagyunk 102 00:06:24,430 --> 00:06:29,090 fog végrehajtani a legkisebb húr A következő hosszú, amely 103 00:06:29,090 --> 00:06:34,420 csak minden karakter a A minimum szimbólum. 104 00:06:34,420 --> 00:06:36,970 Nos, mi ezt az ellenőrzést csinál itt? 105 00:06:36,970 --> 00:06:42,780 Nos, ha index költözött a nyolcadik karaktert kilenc karakter - 106 00:06:42,780 --> 00:06:46,460 így hozzá nyolc c-as korábbi hiszem - 107 00:06:46,460 --> 00:06:51,270 akkor index fog összpontosítani utolsó null terminátor a mi kitalálni 108 00:06:51,270 --> 00:06:57,990 tömb, ami nem azt jelenti, hogy ténylegesen használható a jelszót. 109 00:06:57,990 --> 00:07:03,530 >> Tehát, ha arra törekszünk, hogy az utolsó null terminátor, akkor nem találtak 110 00:07:03,530 --> 00:07:07,750 jelszó, ami érvényes a mindössze nyolc karakter, ami azt jelenti, nincs 111 00:07:07,750 --> 00:07:10,550 érvényes jelszót, amely titkosítja az adott string. 112 00:07:10,550 --> 00:07:13,520 És meg kell nyomtatni, hogy a mondás nem találtunk érvényes 113 00:07:13,520 --> 00:07:16,100 jelszót, és vissza. 114 00:07:16,100 --> 00:07:20,280 Tehát ez a while ciklus fog hajtogat az összes lehetséges szálakat. 115 00:07:20,280 --> 00:07:24,640 >> Ha talál ilyet, amely titkosítja a várható titkosított string, akkor az 116 00:07:24,640 --> 00:07:26,190 vissza a jelszót. 117 00:07:26,190 --> 00:07:29,610 És ez nem talál semmit, akkor vissza fog térni, hogy a nyomtatás 118 00:07:29,610 --> 00:07:31,910 nem találnak semmit. 119 00:07:31,910 --> 00:07:39,220 Most veszi észre, hogy az iterációt minden lehetséges karakterek valószínűleg fog 120 00:07:39,220 --> 00:07:40,420 eltarthat egy ideig. 121 00:07:40,420 --> 00:07:43,590 Nézzük valójában hogyan hosszú, hogy tart. 122 00:07:43,590 --> 00:07:47,230 >> Legyen crack. 123 00:07:47,230 --> 00:07:51,050 Nos, hoppá - azt mondja, meghatározatlan hivatkozás a kriptába. 124 00:07:51,050 --> 00:07:55,330 Úgy emlékszem, hogy a p állítja spec és is a man oldalt a kriptát, hogy 125 00:07:55,330 --> 00:07:58,130 kell kapcsolni a kriptában. 126 00:07:58,130 --> 00:08:01,130 Most, az alapértelmezett make parancsot nem tudja, hogy 127 00:08:01,130 --> 00:08:03,010 szeretné használni ezt a funkciót. 128 00:08:03,010 --> 00:08:09,680 >> Szóval másolni a kliens parancs és add hozzá az, hogy a végén 129 00:08:09,680 --> 00:08:13,300 azt, amely összeköti kripta. 130 00:08:13,300 --> 00:08:14,820 Most, hogy lefordítja. 131 00:08:14,820 --> 00:08:23,880 Úgyhogy fut repedés egy adott titkosított szöveg - 132 00:08:23,880 --> 00:08:25,130 így császáré. 133 00:08:25,130 --> 00:08:28,690 134 00:08:28,690 --> 00:08:30,790 Szóval ez elég gyors. 135 00:08:30,790 --> 00:08:33,230 >> Figyeljük meg, hogy ez a vége 13. 136 00:08:33,230 --> 00:08:38,240 Nos, Caesar titkosított jelszó történetesen 13. 137 00:08:38,240 --> 00:08:41,650 Szóval próbálkozhat másik jelszó megadásával. 138 00:08:41,650 --> 00:08:45,830 Vessünk Hirschhorn titkosított jelszót, majd próbálja csinos ezt. 139 00:08:45,830 --> 00:08:51,750 140 00:08:51,750 --> 00:08:55,110 >> Így észre mi már el három karakter. 141 00:08:55,110 --> 00:08:58,660 És mi az iterációt minden lehetséges három karakterláncok. 142 00:08:58,660 --> 00:09:01,420 Ez azt jelenti, hogy már befejezte iterációt minden lehetséges egy- 143 00:09:01,420 --> 00:09:04,660 két karakterláncok. 144 00:09:04,660 --> 00:09:09,180 Most úgy néz ki, ez lesz a egy ideig, amíg el nem érjük a 145 00:09:09,180 --> 00:09:10,580 négy karakterláncok. 146 00:09:10,580 --> 00:09:14,680 Ez eltarthat egy pár percig. 147 00:09:14,680 --> 00:09:16,055 >> Nem fog egy pár percig. 148 00:09:16,055 --> 00:09:18,450 Mi vagyunk a négy karakterláncokat. 149 00:09:18,450 --> 00:09:22,800 De most, azt kell megismételni az összes lehetséges négy karaktersorozatok, amely 150 00:09:22,800 --> 00:09:26,000 ez eltarthat talán 10 percig. 151 00:09:26,000 --> 00:09:28,720 És amikor elérjük az öt karakter vonósok, meg kell halad-hatunk az összes 152 00:09:28,720 --> 00:09:31,450 azoknak, amelyek egy pár órát. 153 00:09:31,450 --> 00:09:34,080 És meg kell halad-hatunk az összes lehetséges hat karakterláncok, amely 154 00:09:34,080 --> 00:09:36,560 Lehet, hogy egy pár nap, és így tovább. 155 00:09:36,560 --> 00:09:41,380 >> Így lehet, hogy egy potenciálisan nagyon hosszú ideje, hogy az összes lehetséges hajtogat 156 00:09:41,380 --> 00:09:44,850 nyolc karakteres és kevesebb szálakat. 157 00:09:44,850 --> 00:09:50,600 Tehát észre, hogy ez nem feltétlenül a nagyon hatékony algoritmust találni 158 00:09:50,600 --> 00:09:51,860 egy jelszót. 159 00:09:51,860 --> 00:09:54,540 Azt gondolhatnánk, hogy ott jobb módon. 160 00:09:54,540 --> 00:10:02,230 Például a jelszó ZYX! 32ab valószínűleg nem túl gyakori jelszót, 161 00:10:02,230 --> 00:10:06,440 míg a jelszó 12345 valószínűleg sokkal gyakoribb. 162 00:10:06,440 --> 00:10:13,570 >> Tehát az egyik módja, hogy megpróbáljuk megtalálni a jelszót gyorsabban, hogy csak nézni 163 00:10:13,570 --> 00:10:15,560 A jelszavak gyakrabban. 164 00:10:15,560 --> 00:10:20,480 Így például, próbáljuk olvasni szavakat egy szótárt, és próbálja meg az összes 165 00:10:20,480 --> 00:10:24,860 ezek a szavak, mint a mi jelszó találgatások. 166 00:10:24,860 --> 00:10:29,210 Most talán egy jelszó nem ilyen egyszerű. 167 00:10:29,210 --> 00:10:32,600 Lehet, hogy a felhasználó kissé okos és próbálja mellékelik a szám 168 00:10:32,600 --> 00:10:34,220 a végén egy szó. 169 00:10:34,220 --> 00:10:37,000 >> Így talán a jelszó volt password1. 170 00:10:37,000 --> 00:10:41,520 Így próbálja az iterációt a szavakat A szótár egy 171 00:10:41,520 --> 00:10:43,210 végéhez is. 172 00:10:43,210 --> 00:10:47,360 És akkor talán elvégzése után, hogy akkor fűzése két végére is. 173 00:10:47,360 --> 00:10:50,240 >> Vagy lehet, hogy a felhasználó megpróbálja még okosabb, és azt akarják, hogy 174 00:10:50,240 --> 00:10:54,980 jelszó, hogy "hacker", de ők majd cserélje le az összes e a 175 00:10:54,980 --> 00:10:56,600 a hármas. 176 00:10:56,600 --> 00:10:58,440 Így meg tudná csinálni ezt is. 177 00:10:58,440 --> 00:11:02,100 Iterációkhoz minden szót a szótárban de cserélni karakterek 178 00:11:02,100 --> 00:11:04,790 néz ki, mint számok azok a számok. 179 00:11:04,790 --> 00:11:09,670 >> Tehát ilyen módon, akkor lehet elkapni még jelszavakat, hogy elég gyakori. 180 00:11:09,670 --> 00:11:14,690 De a végén, csak úgy lehet elfog az összes jelszót, hogy brute 181 00:11:14,690 --> 00:11:17,340 kényszeríteni hajtogat az összes lehetséges karakterek. 182 00:11:17,340 --> 00:11:22,100 Így a végén, akkor nem kell megismételni az összes húrok egy karakterrel 183 00:11:22,100 --> 00:11:28,110 nyolc karakter, ami egy nagyon hosszú idő, de meg kell csinálni. 184 00:11:28,110 --> 00:11:30,024 >> A nevem Rob Bowden. 185 00:11:30,024 --> 00:11:31,425 És ez Crack. 186 00:11:31,425 --> 00:11:36,533