>> 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.