1 00:00:00,000 --> 00:00:13,000 2 00:00:13,000 --> 00:00:15,890 >> ROB BOWDEN: Sóc Rob, i anem a treballar. 3 00:00:15,890 --> 00:00:19,390 Així que recordi de l'especificació conjunt de processadors que anem a necessitar utilitzar el 4 00:00:19,390 --> 00:00:20,890 funció crypt. 5 00:00:20,890 --> 00:00:26,330 A la pàgina de manual, tenim dos hash de definir _xopensource. 6 00:00:26,330 --> 00:00:28,290 No et preocupis per això hem de fer això. 7 00:00:28,290 --> 00:00:31,550 I també de hash inclouen unistd.h. 8 00:00:31,550 --> 00:00:35,920 >> Així que una vegada que està fora del camí, anem a arribar al programa actual. 9 00:00:35,920 --> 00:00:39,570 El primer que hem de fer és assegurar- l'usuari introdueix una xifra vàlida 10 00:00:39,570 --> 00:00:41,520 contrasenya a la línia d'ordres. 11 00:00:41,520 --> 00:00:46,050 Recordeu que el programa se suposa que funcioni com a punt slash crac, i 12 00:00:46,050 --> 00:00:48,120 a continuació, cadena xifrada. 13 00:00:48,120 --> 00:00:52,990 >> Així que aquí estem comprovant que que argc a dos si volem 14 00:00:52,990 --> 00:00:54,380 continuar amb el programa. 15 00:00:54,380 --> 00:00:58,830 Si argc no és dos, que significa ja sigui l'usuari no s'ha introduït un xifrat 16 00:00:58,830 --> 00:01:02,560 contrasenya a la línia d'ordres, o bé va entrar una mica més que el xifrat 17 00:01:02,560 --> 00:01:05,379 contrasenya a la línia d'ordres, en la qual cas no sabem què fer amb el 18 00:01:05,379 --> 00:01:07,660 arguments de la línia d'ordres. 19 00:01:07,660 --> 00:01:11,390 >> Així que si argc tenia dos anys, podem continuar. 20 00:01:11,390 --> 00:01:14,160 I aquí, anem a declarar una variable de xifrat. 21 00:01:14,160 --> 00:01:17,650 Això només va a àlies originals argv1 pel que en tot aquest 22 00:01:17,650 --> 00:01:20,690 programa, que no ha de trucar argv1, que després cal pensar 23 00:01:20,690 --> 00:01:22,950 sobre el que realment significava. 24 00:01:22,950 --> 00:01:27,180 >> Així que, finalment, volem validar que la contrasenya xifrada de l'usuari 25 00:01:27,180 --> 00:01:30,840 va entrar podria haver estat en realitat una clau xifrada. 26 00:01:30,840 --> 00:01:35,120 Per la pàgina del manual de la cripta, la contrasenya xifrada ha de ser 13 27 00:01:35,120 --> 00:01:36,440 caràcters. 28 00:01:36,440 --> 00:01:41,500 Fins aquí, notem que ens definim de hash xifrar longitud que 13. 29 00:01:41,500 --> 00:01:46,140 Així que estem assegurant que el Longitud de sèrie del xifrat 30 00:01:46,140 --> 00:01:49,090 contrasenya és 13. 31 00:01:49,090 --> 00:01:52,280 >> I si no és així, volem per sortir del programa. 32 00:01:52,280 --> 00:01:56,470 Així que una vegada que està fora del camí, podem Ara en realitat tractar de trobar el que l' 33 00:01:56,470 --> 00:02:00,410 contrasenya que va donar el xifrat contrasenya era. 34 00:02:00,410 --> 00:02:04,870 Aquí, volem prendre la sal des de la contrasenya encriptada. 35 00:02:04,870 --> 00:02:08,930 Recordeu, per la pàgina de manual, que el els dos primers caràcters d'una xifra 36 00:02:08,930 --> 00:02:10,590 corda, com aquí - 37 00:02:10,590 --> 00:02:12,770 50ZPJ i així successivament - 38 00:02:12,770 --> 00:02:16,170 els dos primers caràcters donen nosaltres la sal que es va utilitzar 39 00:02:16,170 --> 00:02:18,080 en la funció de la cripta. 40 00:02:18,080 --> 00:02:21,740 >> I aquí, veiem que la sal era ha. 41 00:02:21,740 --> 00:02:27,610 Així que volem copiar els dos primers caràcters, la longitud de sal és de hash 42 00:02:27,610 --> 00:02:30,230 es defineix com dos. 43 00:02:30,230 --> 00:02:35,970 Cal copiar els dos primers caràcters en aquesta matriu, la sal. 44 00:02:35,970 --> 00:02:39,340 Noteu que necessitem longitud sal més un, ja que encara tenim un nul 45 00:02:39,340 --> 00:02:42,440 terminació al final de la nostra sal. 46 00:02:42,440 --> 00:02:46,940 >> A continuació, anem a declarar aquesta matriu, convidat, de la mida de la longitud màx plus 47 00:02:46,940 --> 00:02:51,930 un, on la longitud màxima és de hash definit de fins a vuit anys, ja que la contrasenya màxima 48 00:02:51,930 --> 00:02:55,090 és de vuit caràcters de longitud. 49 00:02:55,090 --> 00:02:59,860 I farem servir això per repetir sobre totes les cadenes possibles que podrien 50 00:02:59,860 --> 00:03:01,430 ser contrasenyes vàlides. 51 00:03:01,430 --> 00:03:07,720 Així que si els caràcters vàlids en una contrasenya eren simplement a, b, i c, llavors 52 00:03:07,720 --> 00:03:14,970 ens iterar sobre a, b, c, AA, BA, CA, i així successivament, fins que 53 00:03:14,970 --> 00:03:16,690 anem a veure cccccccc - 54 00:03:16,690 --> 00:03:19,600 vuit c. 55 00:03:19,600 --> 00:03:23,620 >> I si no ho hem fet per una vàlida contrasenya, llavors hem de dir que el 56 00:03:23,620 --> 00:03:26,590 cadena xifrada no era vàlida per començar. 57 00:03:26,590 --> 00:03:29,970 Així que ara, arribem a aquest, mentre que 1 cicle. 58 00:03:29,970 --> 00:03:33,100 Observi que significa que és un bucle infinit. 59 00:03:33,100 --> 00:03:36,430 >> Tingueu en compte que no hi ha sentència break dins d'aquest bucle infinit. 60 00:03:36,430 --> 00:03:38,570 No només es tornen declaracions. 61 00:03:38,570 --> 00:03:41,210 Així que en realitat mai esperem per sortir del bucle. 62 00:03:41,210 --> 00:03:44,750 Nosaltres només esperem per sortir del programa. 63 00:03:44,750 --> 00:03:48,220 He afegit aquesta declaració d'impressió a la la part superior d'aquest bucle de només imprimir 64 00:03:48,220 --> 00:03:51,790 el que la nostra estimació actual de Quina és la contrasenya. 65 00:03:51,790 --> 00:03:53,630 >> Ara, què està fent aquest bucle? 66 00:03:53,630 --> 00:03:58,330 És un bucle sobre totes les possibles cadenes que podria ser contrasenyes vàlides. 67 00:03:58,330 --> 00:04:02,700 El primer que farem és prendre la nostra suposició actual del que el 68 00:04:02,700 --> 00:04:03,920 contrasenya. 69 00:04:03,920 --> 00:04:07,230 Anem a prendre la sal que ens agafem de la cadena xifrada, i estem 70 00:04:07,230 --> 00:04:09,850 va a xifrar la conjectura. 71 00:04:09,850 --> 00:04:14,760 Això ens donarà una estimació xifrada, que anem a comparar amb 72 00:04:14,760 --> 00:04:18,810 la cadena de xifrat que l'usuari va entrar a la línia d'ordres. 73 00:04:18,810 --> 00:04:23,030 >> Si són el mateix, en el cas cadena comparable tornarà a zero, si 74 00:04:23,030 --> 00:04:28,050 són les mateixes, llavors suposo que era el contrasenya que ha generat el xifrat 75 00:04:28,050 --> 00:04:33,520 cadena, en aquest cas podem imprimir que a mesura que la nostra contrasenya i retorn. 76 00:04:33,520 --> 00:04:37,520 Però si ells no eren els mateixos, que significa que la nostra suposició era incorrecta. 77 00:04:37,520 --> 00:04:43,250 >> I volem reiterar a la següent suposició vàlida. 78 00:04:43,250 --> 00:04:46,410 Així que això és el que aquest temps loop està tractant de fer. 79 00:04:46,410 --> 00:04:51,760 Es va a repetir la nostra suposició a la següent suposició vàlida. 80 00:04:51,760 --> 00:04:56,080 Tingueu en compte que quan diem que un caràcter particular de la nostra suposició té 81 00:04:56,080 --> 00:05:01,770 arribat al màxim símbol, que fins aquí es defineix com un hash de titlla, ja que 82 00:05:01,770 --> 00:05:05,710 aquest és el personatge més gran valor ASCII que l'usuari pot entrar al 83 00:05:05,710 --> 00:05:11,210 teclat, quan el personatge arriba al màx símbol, llavors vol enviar 84 00:05:11,210 --> 00:05:17,150 de nou al símbol mínim, que és un espai, de nou el més baix ASCII 85 00:05:17,150 --> 00:05:20,800 símbol de valor que un usuari pot introduir en el teclat. 86 00:05:20,800 --> 00:05:22,940 >> Així que anem a establir que per al símbol mínim. 87 00:05:22,940 --> 00:05:25,720 I després anirem en el següent caràcter. 88 00:05:25,720 --> 00:05:28,730 Llavors, com són les nostres conjectures va a repetir? 89 00:05:28,730 --> 00:05:33,685 Bé, si els caràcters vàlids són a, b, i c, llavors si comencem amb un 90 00:05:33,685 --> 00:05:36,630 que va a iterar a b, que va a reiterar c. 91 00:05:36,630 --> 00:05:44,360 c és el nostre símbol màxim, així que anem a establir c de nou a una, el símbol mínim. 92 00:05:44,360 --> 00:05:48,100 I després anem a iterar índex al següent caràcter. 93 00:05:48,100 --> 00:05:53,920 >> Així que si la conjectura original c, el següent caràcter serà la hipòtesi nul · la 94 00:05:53,920 --> 00:05:55,560 terminador. 95 00:05:55,560 --> 00:06:00,670 Aquí sota, noti que si el caràcter que ara volem 96 00:06:00,670 --> 00:06:04,690 increment va ser el terminador nul, llavors anem a posar-lo a la 97 00:06:04,690 --> 00:06:06,260 símbol mínim. 98 00:06:06,260 --> 00:06:11,431 Així que si la conjectura era c, llavors el nostre nova estimació serà aa. 99 00:06:11,431 --> 00:06:16,050 I si la nostra suposició original cccc, la nostra nova conjectura 100 00:06:16,050 --> 00:06:18,380 serà aaaaa. 101 00:06:18,380 --> 00:06:24,430 >> Així que quan arribem a la corda màxima d'una longitud donada, llavors estem 102 00:06:24,430 --> 00:06:29,090 s'aplicarà a la cadena mínima del següent tram, que 103 00:06:29,090 --> 00:06:34,420 penes ser tots els personatges de el símbol mínim. 104 00:06:34,420 --> 00:06:36,970 Ara, què està fent aquesta prova aquí? 105 00:06:36,970 --> 00:06:42,780 Bé, si l'índex va passar de la vuitena caràcter al personatge 09:00 - 106 00:06:42,780 --> 00:06:46,460 així que afegim 8 c del la nostra anterior endevinar - 107 00:06:46,460 --> 00:06:51,270 llavors índex es va a centrar en la última terminador nul de la nostra conjectura 108 00:06:51,270 --> 00:06:57,990 matriu, que no està destinat a realitat utilitzar en la nostra contrasenya. 109 00:06:57,990 --> 00:07:03,530 >> Així que si ens centrem en l'última nul terminador, llavors no hem trobat una 110 00:07:03,530 --> 00:07:07,750 contrasenya que es valida utilitzant només vuit caràcters, el que significa que no hi ha 111 00:07:07,750 --> 00:07:10,550 contrasenya vàlida que encripta amb la cadena donada. 112 00:07:10,550 --> 00:07:13,520 I hem de imprimir això, dient no vam poder trobar una vàlida 113 00:07:13,520 --> 00:07:16,100 contrasenya i retorn. 114 00:07:16,100 --> 00:07:20,280 Així que aquest bucle while es repetirà sobre totes les cadenes possibles. 115 00:07:20,280 --> 00:07:24,640 >> Si troba algun que encripta el cadena xifrada espera, que va a 116 00:07:24,640 --> 00:07:26,190 tornar aquesta contrasenya. 117 00:07:26,190 --> 00:07:29,610 I no troba res, llavors produeixi, la impressió que 118 00:07:29,610 --> 00:07:31,910 no va ser capaç de trobar res. 119 00:07:31,910 --> 00:07:39,220 Ara, fixin-se que iterar sobre tots possibles cadenes probablement va a 120 00:07:39,220 --> 00:07:40,420 tardarà una mica. 121 00:07:40,420 --> 00:07:43,590 Anem a veure realment com temps que porta. 122 00:07:43,590 --> 00:07:47,230 >> Farem el crac. 123 00:07:47,230 --> 00:07:51,050 Bé, perdó - diu indefinit referència a la cripta. 124 00:07:51,050 --> 00:07:55,330 Així que recorda, pel p estableix les especificacions i també la pàgina del manual de la cripta que 125 00:07:55,330 --> 00:07:58,130 necessitat de vincular a la cripta. 126 00:07:58,130 --> 00:08:01,130 Ara, la comanda default fer no sap que 127 00:08:01,130 --> 00:08:03,010 voleu utilitzar aquesta funció. 128 00:08:03,010 --> 00:08:09,680 >> Així que anem a copiar aquesta comanda client i només ha d'afegir a la final 129 00:08:09,680 --> 00:08:13,300 de la mateixa, que uneix cripta. 130 00:08:13,300 --> 00:08:14,820 Ara, compila. 131 00:08:14,820 --> 00:08:23,880 Així que anem a córrer esquerda en un determinat cadena xifrada - 132 00:08:23,880 --> 00:08:25,130 que és del Cèsar. 133 00:08:25,130 --> 00:08:28,690 134 00:08:28,690 --> 00:08:30,790 Així que va ser bastant ràpid. 135 00:08:30,790 --> 00:08:33,230 >> Tingueu en compte que això va acabar el 13. 136 00:08:33,230 --> 00:08:38,240 Bé, contrasenya encriptada de César passa a ser 13. 137 00:08:38,240 --> 00:08:41,650 Així que anem a intentar una altra contrasenya. 138 00:08:41,650 --> 00:08:45,830 Prenguem xifrat de Hirschhorn contrasenya i torneu-ho de craqueig això. 139 00:08:45,830 --> 00:08:51,750 140 00:08:51,750 --> 00:08:55,110 >> Així compte que ja hem arribat tres personatges. 141 00:08:55,110 --> 00:08:58,660 I estem iterar sobre tots els possibles cordes de tres caràcters. 142 00:08:58,660 --> 00:09:01,420 Això vol dir que ja hem acabem itera sobre totes les possibles i un 143 00:09:01,420 --> 00:09:04,660 dues cadenes de caràcters. 144 00:09:04,660 --> 00:09:09,180 Ara, sembla que això va a prendre un temps abans d'arribar a la 145 00:09:09,180 --> 00:09:10,580 cordes de quatre caràcters. 146 00:09:10,580 --> 00:09:14,680 Pot ser que prengui un parell de minuts. 147 00:09:14,680 --> 00:09:16,055 >> No va passar un parell de minuts. 148 00:09:16,055 --> 00:09:18,450 Estem en les cadenes de quatre caràcters. 149 00:09:18,450 --> 00:09:22,800 Però ara, hem de iterar sobre tots els possibles seqüències de quatre caràcters, que 150 00:09:22,800 --> 00:09:26,000 que podria prendre uns 10 minuts. 151 00:09:26,000 --> 00:09:28,720 I després, quan vam arribar a cinc caràcters cadenes, necessitem iterar sobre tots 152 00:09:28,720 --> 00:09:31,450 d'aquells, que podria prendre un parell d'hores. 153 00:09:31,450 --> 00:09:34,080 I hem de iterar sobre tots els possibles sis cadenes de caràcters, que 154 00:09:34,080 --> 00:09:36,560 podria prendre un parell de dies i així successivament. 155 00:09:36,560 --> 00:09:41,380 >> Per tant, podria tenir un potencial molt llarg temps per repetir tots els possibles 156 00:09:41,380 --> 00:09:44,850 08:00 caràcters i un menor nombre de cadenes. 157 00:09:44,850 --> 00:09:50,600 Llavors es va adonar que això no és necessàriament una algorisme molt eficient per trobar 158 00:09:50,600 --> 00:09:51,860 una contrasenya. 159 00:09:51,860 --> 00:09:54,540 Es podria pensar que hi ha hi ha millors maneres. 160 00:09:54,540 --> 00:10:02,230 Per exemple, la contrasenya ZYX! 32AB probablement no és una contrasenya molt comú, 161 00:10:02,230 --> 00:10:06,440 mentre que la contrasenya és 12345 probablement molt més comú. 162 00:10:06,440 --> 00:10:13,570 >> Així que una manera de tractar de trobar una contrasenya més ràpid és mirar només 163 00:10:13,570 --> 00:10:15,560 en contrasenyes que són més comuns. 164 00:10:15,560 --> 00:10:20,480 Així, per exemple, podem tractar de llegir paraules d'un diccionari i tractar tots 165 00:10:20,480 --> 00:10:24,860 aquestes paraules com les nostres conjectures contrasenya. 166 00:10:24,860 --> 00:10:29,210 Ara, potser una contrasenya no és tan simple. 167 00:10:29,210 --> 00:10:32,600 Potser l'usuari va ser una mica intel · ligent i tractar afegint un número al 168 00:10:32,600 --> 00:10:34,220 el final d'una paraula. 169 00:10:34,220 --> 00:10:37,000 >> Així que potser la contrasenya era contraseña1. 170 00:10:37,000 --> 00:10:41,520 Així que vostè pot intentar recórrer en iteració totes les paraules al diccionari amb un 171 00:10:41,520 --> 00:10:43,210 afegit al final de la mateixa. 172 00:10:43,210 --> 00:10:47,360 I llavors potser després de fer això, vostè afegir una a dos el final de la mateixa. 173 00:10:47,360 --> 00:10:50,240 >> O potser l'usuari està tractant de ser encara més intel · ligent, i que volen que el seu 174 00:10:50,240 --> 00:10:54,980 contrasenya sigui "hacker", però són va a reemplaçar totes les instàncies de direcció del 175 00:10:54,980 --> 00:10:56,600 amb tres. 176 00:10:56,600 --> 00:10:58,440 Així que vostè pot fer això també. 177 00:10:58,440 --> 00:11:02,100 Iterar sobre totes les paraules al diccionari però reemplaçar caràcters que 178 00:11:02,100 --> 00:11:04,790 semblar-se als números amb els números. 179 00:11:04,790 --> 00:11:09,670 >> Així d'aquesta manera, es pot contraure encara més contrasenyes que són bastant comuns. 180 00:11:09,670 --> 00:11:14,690 Però al final, l'única manera que pugui agafar les contrasenyes és bruta 181 00:11:14,690 --> 00:11:17,340 forçar iterar sobre tots possibles cadenes. 182 00:11:17,340 --> 00:11:22,100 Així que al final, vostè ha de repetir sobre totes les cordes d'un personatge a 183 00:11:22,100 --> 00:11:28,110 08:00 caràcters, que poden tenir un molt de temps, però cal fer-ho. 184 00:11:28,110 --> 00:11:30,024 >> El meu nom és Rob Bowden. 185 00:11:30,024 --> 00:11:31,425 I aquest és el crack. 186 00:11:31,425 --> 00:11:36,533