1 00:00:00,000 --> 00:00:13,000 2 00:00:13,000 --> 00:00:15,890 >> ROB Bowden: Mi Rob, kaj ni get krakas. 3 00:00:15,890 --> 00:00:19,390 Do memoras el la pset spec ke ni tuj estos neceso uzi la 4 00:00:19,390 --> 00:00:20,890 kripto funkcio. 5 00:00:20,890 --> 00:00:26,330 Por la viro paĝo, ni havas du hash difini _xopensource. 6 00:00:26,330 --> 00:00:28,290 Ne maltrankviliĝu pri tio ni devas fari tion. 7 00:00:28,290 --> 00:00:31,550 Kaj ankaŭ hash inkluzivas unistd.h. 8 00:00:31,550 --> 00:00:35,920 >> Do iam tio estas de la vojo, ni alveni ĝis la aktuala programo. 9 00:00:35,920 --> 00:00:39,570 Ni unue bezonas fari estas certiĝi la uzanto eniris validan ĉifrita 10 00:00:39,570 --> 00:00:41,520 pasvorton ĉe la komandlinio. 11 00:00:41,520 --> 00:00:46,050 Memoru ke la programo supozas esti fluigos kiel skalara oblikvo fendon, kaj 12 00:00:46,050 --> 00:00:48,120 tiam ĉifrita kordo. 13 00:00:48,120 --> 00:00:52,990 >> Do jen ni kontrolanta certigi ke argc al du se ni volas 14 00:00:52,990 --> 00:00:54,380 daŭrigi kun la programo. 15 00:00:54,380 --> 00:00:58,830 Se argc estas ne du, kiu signifas ĉu la uzanto ne eniris ĉifrita 16 00:00:58,830 --> 00:01:02,560 pasvorton ĉe la komandlinio, aŭ ili eniris pli ol nur la ĉifrita 17 00:01:02,560 --> 00:01:05,379 pasvorton ĉe la komandlinio, en kiu kazo ni ne scias kion fari kun la 18 00:01:05,379 --> 00:01:07,660 komandlinio argumentoj. 19 00:01:07,660 --> 00:01:11,390 >> Do se argc estis du, ni povas daŭrigi. 20 00:01:11,390 --> 00:01:14,160 Kaj tie, ni tuj rakontu variablo ĉifrita. 21 00:01:14,160 --> 00:01:17,650 Tio nur tuj alias la originala argv1 tiel ke tra ĉi 22 00:01:17,650 --> 00:01:20,690 programo, ni ne devas nomi ĝin argv1, kion do vi devos pensi 23 00:01:20,690 --> 00:01:22,950 pri kio fakte signifis. 24 00:01:22,950 --> 00:01:27,180 >> Do fine, ni volas validigi ke la ĉifrita pasvorto de la uzanto 25 00:01:27,180 --> 00:01:30,840 eniris povus esti vere estis ĉifrita pasvorto. 26 00:01:30,840 --> 00:01:35,120 Per la viro paĝo de kripto, la ĉifrita pasvorto devas esti 13 27 00:01:35,120 --> 00:01:36,440 signojn longa. 28 00:01:36,440 --> 00:01:41,500 Ĝis ĉi tie, rimarki ke ni hash difinita ĉifri longon kiel 13. 29 00:01:41,500 --> 00:01:46,140 Do ni simple certigi, ke la korda longeco de la ĉifrita 30 00:01:46,140 --> 00:01:49,090 pasvorto estas 13. 31 00:01:49,090 --> 00:01:52,280 >> Kaj se ĝi ne estas, ni volas por eliri la programon. 32 00:01:52,280 --> 00:01:56,470 Do iam tio estas de la vojo, ni povas nun efektive provi trovi, kion la 33 00:01:56,470 --> 00:02:00,410 pasvorton kiu donis la ĉifrita pasvorto estis. 34 00:02:00,410 --> 00:02:04,870 Tie, ni volas kapti la salo de la ĉifrita pasvorto. 35 00:02:04,870 --> 00:02:08,930 Memoru, por la viro paĝo, ke la unuaj du gravuloj de ĉifrita 36 00:02:08,930 --> 00:02:10,590 ĉeno, kiel ĉi tie - 37 00:02:10,590 --> 00:02:12,770 50ZPJ kaj tiel plu - 38 00:02:12,770 --> 00:02:16,170 la unuaj du karakteroj doni ni la salo, kiu estis uzata 39 00:02:16,170 --> 00:02:18,080 en la kripto funkcio. 40 00:02:18,080 --> 00:02:21,740 >> Kaj tie, ni vidas ke la salo estis ha. 41 00:02:21,740 --> 00:02:27,610 Do ni deziras kopii la unuaj du karakterojn, salo longo esti hash 42 00:02:27,610 --> 00:02:30,230 difinita kiel du. 43 00:02:30,230 --> 00:02:35,970 Ni devas kopii la unuaj du karakteroj en ĉi tiu tabelo, salo. 44 00:02:35,970 --> 00:02:39,340 Rimarku ke ni bezonas salon longo pli , pro tio ni daŭre bezonas nula 45 00:02:39,340 --> 00:02:42,440 terminator al la fino de nia salo. 46 00:02:42,440 --> 00:02:46,940 >> Tiam ni iras por deklari ĉi tabelo, gasto, de amplekso max longo pli 47 00:02:46,940 --> 00:02:51,930 , kie maks longo estas hash difinita kiel ok, ekde la maksimuma pasvorton 48 00:02:51,930 --> 00:02:55,090 Estas ok signojn longa. 49 00:02:55,090 --> 00:02:59,860 Kaj ni tuj uzi ĉi persisti super ĉiuj ebla kordoj kiuj povis 50 00:02:59,860 --> 00:03:01,430 validus pasvortojn. 51 00:03:01,430 --> 00:03:07,720 Do se la validajn signojn en pasvorton Estis nur, b, kaj c, tiam 52 00:03:07,720 --> 00:03:14,970 ni devus persisti super a, b, c, aa, ba, ca, kaj tiel plu, ĝis 53 00:03:14,970 --> 00:03:16,690 ni atingos vidi cccccccc - 54 00:03:16,690 --> 00:03:19,600 ok c aj jaroj. 55 00:03:19,600 --> 00:03:23,620 >> Kaj se ni ne havus tian malsupren validan pasvorto, tiam ni devas diri ke la 56 00:03:23,620 --> 00:03:26,590 ĉifrita kordo ne estis valida por komenci. 57 00:03:26,590 --> 00:03:29,970 Do nun, ni atingos ĉi tion dum 1 buklo. 58 00:03:29,970 --> 00:03:33,100 Rimarku ke tio signifas ke estas malfinia ciklo. 59 00:03:33,100 --> 00:03:36,430 >> Rimarku ne estas rompo komunikaĵo ene de ĉi senfina iteracio. 60 00:03:36,430 --> 00:03:38,570 Ekzistas nur reveni deklaroj. 61 00:03:38,570 --> 00:03:41,210 Do ni neniam vere atendas por eliri la banton. 62 00:03:41,210 --> 00:03:44,750 Ni nur atendas por eliri la programon. 63 00:03:44,750 --> 00:03:48,220 Mi aldonis tiun print deklaro al la supro de tiu buklo al nur elprinti 64 00:03:48,220 --> 00:03:51,790 kio nia aktuala konjekton en kion la pasvorto estas. 65 00:03:51,790 --> 00:03:53,630 >> Nun, kio ĉi buklo faras? 66 00:03:53,630 --> 00:03:58,330 Ĝi estas looping super ĉiuj ebla kordoj kiu povus esti valida pasvortojn. 67 00:03:58,330 --> 00:04:02,700 La unua afero, ni tuj faros estas prenu nian aktualan konjekton pro kio la 68 00:04:02,700 --> 00:04:03,920 pasvorto estas. 69 00:04:03,920 --> 00:04:07,230 Ni prenos la salo kiu ni kaptis el la kodita ĉeno, kaj ni estas 70 00:04:07,230 --> 00:04:09,850 tuj ĉifri la konjekton. 71 00:04:09,850 --> 00:04:14,760 Ĉi tio donos al ni ĉifrita konjekto, kiun ni iras kompare kontraŭ 72 00:04:14,760 --> 00:04:18,810 la kodita ĉeno kiu la uzanto eniris en la komandlinio. 73 00:04:18,810 --> 00:04:23,030 >> Se ili estas la sama, en kiu kazo kordo komparebla revenos nulo, se 74 00:04:23,030 --> 00:04:28,050 ili estas la sama, tiam diveni estis la pasvorton kiu generis la ĉifrita 75 00:04:28,050 --> 00:04:33,520 kordo, en kiu kazo oni povas presi ke kiel nia pasvorton kaj reveno. 76 00:04:33,520 --> 00:04:37,520 Sed se ili ne estis la sama, kiu signifas nia diveno malĝusta. 77 00:04:37,520 --> 00:04:43,250 >> Kaj ni volas persisti por la venonta valida konjekton. 78 00:04:43,250 --> 00:04:46,410 Do, tio estas kion tio dum buklo provas fari. 79 00:04:46,410 --> 00:04:51,760 Ĝi okazas ankaŭ persisti en nia konjekton al la sekvanta valida konjekton. 80 00:04:51,760 --> 00:04:56,080 Rimarku, ke kiam ni diras ke aparta karaktero de nia diveno havas 81 00:04:56,080 --> 00:05:01,770 atingis la max simbolo, kiu ĉi tien estas hash difinita kiel supersigno, ekde 82 00:05:01,770 --> 00:05:05,710 tio estas la plej granda ASCII valoro karaktero ke uzanto povas eniri en la 83 00:05:05,710 --> 00:05:11,210 klavaro, kiam la karaktero atingas la maks simbolon, tiam ni volas sendi 84 00:05:11,210 --> 00:05:17,150 ĝin al la minimuma simbolo, kiu estas spaco, denove la plej malalta ASCII 85 00:05:17,150 --> 00:05:20,800 valoro simbolo kiun uzanto povas eniri ĉe la klavaro. 86 00:05:20,800 --> 00:05:22,940 >> Do ni tuj starigu ke al la minimuma simbolo. 87 00:05:22,940 --> 00:05:25,720 Kaj tiam ni tuj iru al la venonta signo. 88 00:05:25,720 --> 00:05:28,730 Do kiel estas niaj konjektoj tuj persisti? 89 00:05:28,730 --> 00:05:33,685 Nu, se la validaj signoj estas a, b, kaj c, tiam se ni komencis kun a, 90 00:05:33,685 --> 00:05:36,630 ĝi devos persisti al b, tio instruos vin persisti al c. 91 00:05:36,630 --> 00:05:44,360 c estas nia maks simbolo, tial ni starigis c reen al, la minimuma simbolo. 92 00:05:44,360 --> 00:05:48,100 Kaj tiam ni devos persisti indekso al la sekvanta signo. 93 00:05:48,100 --> 00:05:53,920 >> Do, se la originala diveno c, la sekvanta karaktero tuj estos la nula 94 00:05:53,920 --> 00:05:55,560 terminator. 95 00:05:55,560 --> 00:06:00,670 Cxi tie, rimarki ke se la karaktero ke ni nun volas 96 00:06:00,670 --> 00:06:04,690 pliigo estis la nula terminator, tiam ni tuj starigu gxin al la 97 00:06:04,690 --> 00:06:06,260 minimuma simbolo. 98 00:06:06,260 --> 00:06:11,431 Do se la diveno c, tiam nia novan konjekton tuj estos aa. 99 00:06:11,431 --> 00:06:16,050 Kaj se nia originala diveno CCCC, tiam nia nova konjekton 100 00:06:16,050 --> 00:06:18,380 tuj estos aaaaa. 101 00:06:18,380 --> 00:06:24,430 >> Do kiam ajn ni atingas la maksimuman kordo de donita longo, tiam ni estas 102 00:06:24,430 --> 00:06:29,090 tuj apliki al la minimuma kordo de la venonta longitudo, kiu estos 103 00:06:29,090 --> 00:06:34,420 nur estu ĉiuj karakteroj de la minimuma simbolo. 104 00:06:34,420 --> 00:06:36,970 Nun, kio ĉi ĉekon faras ĉi tie? 105 00:06:36,970 --> 00:06:42,780 Nu, se index kopiis de la oka karakteron al la naŭ karaktero - 106 00:06:42,780 --> 00:06:46,460 do ni aldonos ok c estas kiel nia antaŭa diveni - 107 00:06:46,460 --> 00:06:51,270 tiam indekso tuj enfokusigi la lasta nula terminator de nia diveno 108 00:06:51,270 --> 00:06:57,990 tabelo, kiu ne intencis efektive esti uzata en nia pasvorton. 109 00:06:57,990 --> 00:07:03,530 >> Do, se ni enfokusigas sur tiu lasta nula Terminator, tiam ni ne trovis 110 00:07:03,530 --> 00:07:07,750 pasvorton kiu estas valida uzante nur ok karakterojn, kiu signifas ne ekzistas 111 00:07:07,750 --> 00:07:10,550 valida pasvorton kiu encrypts al la donita linio. 112 00:07:10,550 --> 00:07:13,520 Kaj ni devas presi, kiu jene Ni ne povis trovi validan 113 00:07:13,520 --> 00:07:16,100 pasvorto, kaj reveni. 114 00:07:16,100 --> 00:07:20,280 Do tio dum buklo tuj persisti super ĉiuj ebla kordoj. 115 00:07:20,280 --> 00:07:24,640 >> Se ĝi trovas neniun kiu encrypts al la atendis ĉifrita ĉenon, tio instruos vin 116 00:07:24,640 --> 00:07:26,190 revenu ke pasvorton. 117 00:07:26,190 --> 00:07:29,610 Kaj ĝi ne trovas ion, tiam ĝi revenos, presi ke 118 00:07:29,610 --> 00:07:31,910 ne povis trovi nenion. 119 00:07:31,910 --> 00:07:39,220 Nun, rimarki ke ripetanta super ĉiuj ebla kordoj estas probable tuj 120 00:07:39,220 --> 00:07:40,420 preni momenton. 121 00:07:40,420 --> 00:07:43,590 Ni efektive vidi kiel longa kiu portas. 122 00:07:43,590 --> 00:07:47,230 >> Ni faru fendo. 123 00:07:47,230 --> 00:07:51,050 Nu, oops - diras nedefinita referenci al kripto. 124 00:07:51,050 --> 00:07:55,330 Do memoru, por la p aroj spec kaj Ankaŭ la viro paĝo por kripto, ke ni 125 00:07:55,330 --> 00:07:58,130 bezonas ligi en kripto. 126 00:07:58,130 --> 00:08:01,130 Nun, la defaŭlta faru komandon Ne scias ke vi 127 00:08:01,130 --> 00:08:03,010 volas uzi tiun funkcion. 128 00:08:03,010 --> 00:08:09,680 >> Do ni kopias ĉi kliento komando kaj simple aldonu al la fino 129 00:08:09,680 --> 00:08:13,300 pri tio, ligante kripto. 130 00:08:13,300 --> 00:08:14,820 Nun, ĝi kompilas. 131 00:08:14,820 --> 00:08:23,880 Do ni kuros fendo sur donita ĉifrita kordo - 132 00:08:23,880 --> 00:08:25,130 tiel Cezaro. 133 00:08:25,130 --> 00:08:28,690 134 00:08:28,690 --> 00:08:30,790 Por ke estis sufiĉe rapide. 135 00:08:30,790 --> 00:08:33,230 >> Rimarku ke ĉi finiĝis je 13. 136 00:08:33,230 --> 00:08:38,240 Nu, Cezaro ĉifrita pasvorto hazarde estas 13. 137 00:08:38,240 --> 00:08:41,650 Do ni provu alian pasvorton. 138 00:08:41,650 --> 00:08:45,830 Ni prenu Hirschhorn estas ĉifrita pasvorto kaj provi krakas tio. 139 00:08:45,830 --> 00:08:51,750 140 00:08:51,750 --> 00:08:55,110 >> Do rimarki ni jam atingis tri signojn. 141 00:08:55,110 --> 00:08:58,660 Kaj ni ripetanta super ĉiuj ebla tri-karaktero ŝnuroj. 142 00:08:58,660 --> 00:09:01,420 Tio signifas ke ni jam fini ripetanta super ĉiuj ebla kaj 143 00:09:01,420 --> 00:09:04,660 du karaktero ŝnuroj. 144 00:09:04,660 --> 00:09:09,180 Nun, ĝi aspektas kiel ĉi tio tuj preni momenton antaŭ ol ni atingos la 145 00:09:09,180 --> 00:09:10,580 kvar karaktero ŝnuroj. 146 00:09:10,580 --> 00:09:14,680 Eble kelkaj minutoj. 147 00:09:14,680 --> 00:09:16,055 >> Ĝi ne postrestis kelkaj minutoj. 148 00:09:16,055 --> 00:09:18,450 Ni estas sur la kvar-karaktero ŝnuroj. 149 00:09:18,450 --> 00:09:22,800 Sed nun, ni bezonas ankaŭ persisti super ĉiuj eble kvar karaktero ŝnuroj, kiuj 150 00:09:22,800 --> 00:09:26,000 kiuj povus fari eble 10 minutoj. 151 00:09:26,000 --> 00:09:28,720 Kaj poste kiam ni atingos kvin karaktero kordoj, ni bezonas ankaŭ persisti super ĉiuj 152 00:09:28,720 --> 00:09:31,450 de tiuj, kiuj povus prenu paron horoj. 153 00:09:31,450 --> 00:09:34,080 Kaj ni bezonas ankaŭ persisti super ĉiuj ebla ses-karaktero ŝnuroj, kiuj 154 00:09:34,080 --> 00:09:36,560 povus preni kelkajn tagojn kaj tiel plu. 155 00:09:36,560 --> 00:09:41,380 >> Do ĝi povus preni potenciale tre longa tempon por persisti super ĉiuj ebla 156 00:09:41,380 --> 00:09:44,850 ok-karaktero kaj malpli da kordoj. 157 00:09:44,850 --> 00:09:50,600 Do rimarki ke tiu ne estas nepre tre kompetenta algoritmo por trovi 158 00:09:50,600 --> 00:09:51,860 pasvorto. 159 00:09:51,860 --> 00:09:54,540 Vi povus pensi, ke tie estas pli bonaj manieroj. 160 00:09:54,540 --> 00:10:02,230 Ekzemple, la pasvorton ZYX! 32ab Probable ne estas tre komuna pasvorton, 161 00:10:02,230 --> 00:10:06,440 dum la pasvorton 12345 estas verŝajne multe pli komuna. 162 00:10:06,440 --> 00:10:13,570 >> Do unu vojo klopodante trovi pasvorton pli rapide estas simple rigardu 163 00:10:13,570 --> 00:10:15,560 ĉe pasvortoj, kiu estas pli komuna. 164 00:10:15,560 --> 00:10:20,480 Do ekzemple, ni povas provi legi vortojn el vortaro kaj provi ĉiujn 165 00:10:20,480 --> 00:10:24,860 tiuj vortoj kiel nia pasvorton divenas. 166 00:10:24,860 --> 00:10:29,210 Nun, eble pasvorton ne estas tiel simpla. 167 00:10:29,210 --> 00:10:32,600 Eble la uzanto estis tiel ruza kaj provi appending numero al 168 00:10:32,600 --> 00:10:34,220 la fino de vorto. 169 00:10:34,220 --> 00:10:37,000 >> Do eble ilia pasvorto estis password1. 170 00:10:37,000 --> 00:10:41,520 Do vi povas provi ripetanta super ĉiuj vortoj en la vortaro per unu 171 00:10:41,520 --> 00:10:43,210 aldonita ĉe la fino de ĝi. 172 00:10:43,210 --> 00:10:47,360 Kaj tiam eble post fari tion, vi instruos vin postglui al du al la fino de ĝi. 173 00:10:47,360 --> 00:10:50,240 >> Aŭ eble la uzanto provas esti eĉ pli lerta, kaj ili volas lian 174 00:10:50,240 --> 00:10:54,980 pasvorto estu "hacker", sed ili estas tuj anstataŭi ĉiujn petskribojn de e la 175 00:10:54,980 --> 00:10:56,600 kun triope. 176 00:10:56,600 --> 00:10:58,440 Tiel vi povus fari tion ankaŭ. 177 00:10:58,440 --> 00:11:02,100 Persisti super ĉiuj vortoj en la vortaro sed anstataŭi karakteroj kiuj 178 00:11:02,100 --> 00:11:04,790 aspektas kiel numeroj kun tiuj numeroj. 179 00:11:04,790 --> 00:11:09,670 >> Do tiu vojo, vi povus kapti eĉ pli pasvortoj, kiu estas sufiĉe komuna. 180 00:11:09,670 --> 00:11:14,690 Sed en la fino, la sola maniero vi povas kapti ĉiujn pasvortojn estas malpura 181 00:11:14,690 --> 00:11:17,340 devigi persisti super ĉiuj ebla kordoj. 182 00:11:17,340 --> 00:11:22,100 Tiel en la fino, vi bezonos ankaŭ persisti super ĉiuj kordoj de unu signo por 183 00:11:22,100 --> 00:11:28,110 ok karakteroj, kiu povus preni tre longa tempo, sed vi devas fari. 184 00:11:28,110 --> 00:11:30,024 >> Mia nomo estas Rob Bowden. 185 00:11:30,024 --> 00:11:31,425 Kaj jen estas Crack. 186 00:11:31,425 --> 00:11:36,533