ROB BOWDEN: Sóc Rob, i anem a treballar. Així que recordi de l'especificació conjunt de processadors que anem a necessitar utilitzar el funció crypt. A la pàgina de manual, tenim dos hash de definir _xopensource. No et preocupis per això hem de fer això. I també de hash inclouen unistd.h. Així que una vegada que està fora del camí, anem a arribar al programa actual. El primer que hem de fer és assegurar- l'usuari introdueix una xifra vàlida contrasenya a la línia d'ordres. Recordeu que el programa se suposa que funcioni com a punt slash crac, i a continuació, cadena xifrada. Així que aquí estem comprovant que que argc a dos si volem continuar amb el programa. Si argc no és dos, que significa ja sigui l'usuari no s'ha introduït un xifrat contrasenya a la línia d'ordres, o bé va entrar una mica més que el xifrat contrasenya a la línia d'ordres, en la qual cas no sabem què fer amb el arguments de la línia d'ordres. Així que si argc tenia dos anys, podem continuar. I aquí, anem a declarar una variable de xifrat. Això només va a àlies originals argv1 pel que en tot aquest programa, que no ha de trucar argv1, que després cal pensar sobre el que realment significava. Així que, finalment, volem validar que la contrasenya xifrada de l'usuari va entrar podria haver estat en realitat una clau xifrada. Per la pàgina del manual de la cripta, la contrasenya xifrada ha de ser 13 caràcters. Fins aquí, notem que ens definim de hash xifrar longitud que 13. Així que estem assegurant que el Longitud de sèrie del xifrat contrasenya és 13. I si no és així, volem per sortir del programa. Així que una vegada que està fora del camí, podem Ara en realitat tractar de trobar el que l' contrasenya que va donar el xifrat contrasenya era. Aquí, volem prendre la sal des de la contrasenya encriptada. Recordeu, per la pàgina de manual, que el els dos primers caràcters d'una xifra corda, com aquí - 50ZPJ i així successivament - els dos primers caràcters donen nosaltres la sal que es va utilitzar en la funció de la cripta. I aquí, veiem que la sal era ha. Així que volem copiar els dos primers caràcters, la longitud de sal és de hash es defineix com dos. Cal copiar els dos primers caràcters en aquesta matriu, la sal. Noteu que necessitem longitud sal més un, ja que encara tenim un nul terminació al final de la nostra sal. A continuació, anem a declarar aquesta matriu, convidat, de la mida de la longitud màx plus un, on la longitud màxima és de hash definit de fins a vuit anys, ja que la contrasenya màxima és de vuit caràcters de longitud. I farem servir això per repetir sobre totes les cadenes possibles que podrien ser contrasenyes vàlides. Així que si els caràcters vàlids en una contrasenya eren simplement a, b, i c, llavors ens iterar sobre a, b, c, AA, BA, CA, i així successivament, fins que anem a veure cccccccc - vuit c. I si no ho hem fet per una vàlida contrasenya, llavors hem de dir que el cadena xifrada no era vàlida per començar. Així que ara, arribem a aquest, mentre que 1 cicle. Observi que significa que és un bucle infinit. Tingueu en compte que no hi ha sentència break dins d'aquest bucle infinit. No només es tornen declaracions. Així que en realitat mai esperem per sortir del bucle. Nosaltres només esperem per sortir del programa. He afegit aquesta declaració d'impressió a la la part superior d'aquest bucle de només imprimir el que la nostra estimació actual de Quina és la contrasenya. Ara, què està fent aquest bucle? És un bucle sobre totes les possibles cadenes que podria ser contrasenyes vàlides. El primer que farem és prendre la nostra suposició actual del que el contrasenya. Anem a prendre la sal que ens agafem de la cadena xifrada, i estem va a xifrar la conjectura. Això ens donarà una estimació xifrada, que anem a comparar amb la cadena de xifrat que l'usuari va entrar a la línia d'ordres. Si són el mateix, en el cas cadena comparable tornarà a zero, si són les mateixes, llavors suposo que era el contrasenya que ha generat el xifrat cadena, en aquest cas podem imprimir que a mesura que la nostra contrasenya i retorn. Però si ells no eren els mateixos, que significa que la nostra suposició era incorrecta. I volem reiterar a la següent suposició vàlida. Així que això és el que aquest temps loop està tractant de fer. Es va a repetir la nostra suposició a la següent suposició vàlida. Tingueu en compte que quan diem que un caràcter particular de la nostra suposició té arribat al màxim símbol, que fins aquí es defineix com un hash de titlla, ja que aquest és el personatge més gran valor ASCII que l'usuari pot entrar al teclat, quan el personatge arriba al màx símbol, llavors vol enviar de nou al símbol mínim, que és un espai, de nou el més baix ASCII símbol de valor que un usuari pot introduir en el teclat. Així que anem a establir que per al símbol mínim. I després anirem en el següent caràcter. Llavors, com són les nostres conjectures va a repetir? Bé, si els caràcters vàlids són a, b, i c, llavors si comencem amb un que va a iterar a b, que va a reiterar c. c és el nostre símbol màxim, així que anem a establir c de nou a una, el símbol mínim. I després anem a iterar índex al següent caràcter. Així que si la conjectura original c, el següent caràcter serà la hipòtesi nul · la terminador. Aquí sota, noti que si el caràcter que ara volem increment va ser el terminador nul, llavors anem a posar-lo a la símbol mínim. Així que si la conjectura era c, llavors el nostre nova estimació serà aa. I si la nostra suposició original cccc, la nostra nova conjectura serà aaaaa. Així que quan arribem a la corda màxima d'una longitud donada, llavors estem s'aplicarà a la cadena mínima del següent tram, que penes ser tots els personatges de el símbol mínim. Ara, què està fent aquesta prova aquí? Bé, si l'índex va passar de la vuitena caràcter al personatge 09:00 - així que afegim 8 c del la nostra anterior endevinar - llavors índex es va a centrar en la última terminador nul de la nostra conjectura matriu, que no està destinat a realitat utilitzar en la nostra contrasenya. Així que si ens centrem en l'última nul terminador, llavors no hem trobat una contrasenya que es valida utilitzant només vuit caràcters, el que significa que no hi ha contrasenya vàlida que encripta amb la cadena donada. I hem de imprimir això, dient no vam poder trobar una vàlida contrasenya i retorn. Així que aquest bucle while es repetirà sobre totes les cadenes possibles. Si troba algun que encripta el cadena xifrada espera, que va a tornar aquesta contrasenya. I no troba res, llavors produeixi, la impressió que no va ser capaç de trobar res. Ara, fixin-se que iterar sobre tots possibles cadenes probablement va a tardarà una mica. Anem a veure realment com temps que porta. Farem el crac. Bé, perdó - diu indefinit referència a la cripta. Així que recorda, pel p estableix les especificacions i també la pàgina del manual de la cripta que necessitat de vincular a la cripta. Ara, la comanda default fer no sap que voleu utilitzar aquesta funció. Així que anem a copiar aquesta comanda client i només ha d'afegir a la final de la mateixa, que uneix cripta. Ara, compila. Així que anem a córrer esquerda en un determinat cadena xifrada - que és del Cèsar. Així que va ser bastant ràpid. Tingueu en compte que això va acabar el 13. Bé, contrasenya encriptada de César passa a ser 13. Així que anem a intentar una altra contrasenya. Prenguem xifrat de Hirschhorn contrasenya i torneu-ho de craqueig això. Així compte que ja hem arribat tres personatges. I estem iterar sobre tots els possibles cordes de tres caràcters. Això vol dir que ja hem acabem itera sobre totes les possibles i un dues cadenes de caràcters. Ara, sembla que això va a prendre un temps abans d'arribar a la cordes de quatre caràcters. Pot ser que prengui un parell de minuts. No va passar un parell de minuts. Estem en les cadenes de quatre caràcters. Però ara, hem de iterar sobre tots els possibles seqüències de quatre caràcters, que que podria prendre uns 10 minuts. I després, quan vam arribar a cinc caràcters cadenes, necessitem iterar sobre tots d'aquells, que podria prendre un parell d'hores. I hem de iterar sobre tots els possibles sis cadenes de caràcters, que podria prendre un parell de dies i així successivament. Per tant, podria tenir un potencial molt llarg temps per repetir tots els possibles 08:00 caràcters i un menor nombre de cadenes. Llavors es va adonar que això no és necessàriament una algorisme molt eficient per trobar una contrasenya. Es podria pensar que hi ha hi ha millors maneres. Per exemple, la contrasenya ZYX! 32AB probablement no és una contrasenya molt comú, mentre que la contrasenya és 12345 probablement molt més comú. Així que una manera de tractar de trobar una contrasenya més ràpid és mirar només en contrasenyes que són més comuns. Així, per exemple, podem tractar de llegir paraules d'un diccionari i tractar tots aquestes paraules com les nostres conjectures contrasenya. Ara, potser una contrasenya no és tan simple. Potser l'usuari va ser una mica intel · ligent i tractar afegint un número al el final d'una paraula. Així que potser la contrasenya era contraseña1. Així que vostè pot intentar recórrer en iteració totes les paraules al diccionari amb un afegit al final de la mateixa. I llavors potser després de fer això, vostè afegir una a dos el final de la mateixa. O potser l'usuari està tractant de ser encara més intel · ligent, i que volen que el seu contrasenya sigui "hacker", però són va a reemplaçar totes les instàncies de direcció del amb tres. Així que vostè pot fer això també. Iterar sobre totes les paraules al diccionari però reemplaçar caràcters que semblar-se als números amb els números. Així d'aquesta manera, es pot contraure encara més contrasenyes que són bastant comuns. Però al final, l'única manera que pugui agafar les contrasenyes és bruta forçar iterar sobre tots possibles cadenes. Així que al final, vostè ha de repetir sobre totes les cordes d'un personatge a 08:00 caràcters, que poden tenir un molt de temps, però cal fer-ho. El meu nom és Rob Bowden. I aquest és el crack.