>> ROB BOWDEN: Eu son Rob, e imos comezar rachando.
Entón lembre de que a especificación pset imos ter usar o
crypt.
Á páxina de inicio, temos dous hash de definir _xopensource.
Non se preocupe sobre o por que necesitamos facelo.
E tamén haxix inclúen unistd.h.
>> Así, unha vez que está fóra do camiño, imos chegar ao programa real.
O primeiro que temos que facer é asegurarse de o usuario inseriu un cifrado válido
contrasinal na liña de comandos.
Lembre que o programa se quere para ser executado como dot barra de crack, e
entón cadea cifrada.
>> Entón, aquí estamos comprobando para asegurarse se que argc a dous, se quere
continuar co programa.
Se argc non é dous, o que significa calquera o usuario non entrar un cifrado
contrasinal na liña de comandos, ou entrou máis que o cifrado
contrasinal na liña de ordes, en que se non sabe o que facer co
argumentos de liña de comandos.
>> Entón, se argc tiña dous anos, podemos continuar.
E aquí, nós imos declarar unha variable cifrada.
Isto só vai alias orixinais argv1 de xeito que ao longo desta
programa, non debemos chamalo argv1, que, entón, ten que pensar
sobre o que iso realmente significa.
>> Entón, finalmente, queremos validar que o contrasinal cifrada do usuario
entrou podería ser realmente un contrasinal cifrada.
Por páxina man do cripta, a contrasinal cifrada debe ser 13
caracteres.
Ata aquí, entender que Hash definido cifrar lonxitude 13.
Entón, nós estamos só asegurarse de que o lonxitude da corda do cifrado
contrasinal é 13.
>> E se non é, queremos para saír do programa.
Así, unha vez que está fóra de forma, podemos agora realmente tentar atopar o que o
contrasinal que deu o cifrado contrasinal era.
Aquí, queremos coller o sal contrasinal cifrada.
Lembre-se de acordo coa páxina do home, que o os dous primeiros caracteres dun cifrado
cadea, como aquí -
50ZPJ e así por diante -
os dous primeiros caracteres dar nós o sal que se utilizou
en función da cripta.
>> E aquí vemos que o sal era ha.
Entón, nós queremos copiar os dous primeiros caracteres, a lonxitude sal ser haxix
definida como dous.
Temos que copiar os dous primeiros caracteres nesa matriz, sal.
Teña en conta que necesitamos lonxitude sal máis un, xa que aínda precisa dun nulo
terminator ao final do noso sal.
>> Entón imos declarar esa matriz, convidado, de gran dimensión max máis
un, onde a lonxitude máxima é de hash definido como oito, xa que o máximo de contrasinal
é de oito caracteres.
E nós imos usar isto para repetir sobre as cordas posibles que poderían
ser claves válidas.
Entón, se os caracteres válidos nun contrasinal foron só a, b, c, entón
queremos iterado a, b, c, aa, ba, ca, e así por diante, ata
temos que ver cccccccc -
oito c do.
>> E se non temos por un válido contrasinal, entón debemos dicir que o
cadea cifrada non era válido para comezar.
Entón, agora, chegamos a este mentres un loop.
Teña en conta que significa que é un loop infinito.
>> Teña en conta que non hai instrución break dentro deste loop infinito.
Hai só volver declaracións.
Entón, nós nunca realmente esperar para saír do loop.
Nós só esperar para saír do programa.
Eu engade esta declaración de impresión para a Ademais loop para só imprimir
que a nosa suposición corrente no cal é o contrasinal.
>> Agora, o que é este ciclo facendo?
É un loop sobre as cordas posibles que podería ser claves válidas.
O primeiro que imos facer é tomar o noso palpite actual ao que o
contrasinal.
Imos levar o sal que nos agarramos desde a cadea cifrada, e estamos
indo para cifrar o palpite.
Isto daranos un palpite criptografía, que nós estamos indo a comparación
a cadea cifrada que o usuario entrou na liña de comandos.
>> Se son idénticos, caso en que corda comparable volverá cero, se
son o mesmo, entón creo que foi o contrasinal que xerou o cifrado
cadea, caso en que pode imprimir que, como o seu contrasinal e retorno.
Pero se eles non eran os mesmos, que significa que o noso palpite estaba incorrecta.
>> E nós queremos repetir a a seguinte suposición válida.
Entón, iso é o que este tempo loop está intentando facer.
Vai repetir o noso palpite á seguinte suposición válida.
Teña en conta que cando dicimos que un carácter particular, na nosa suposición ten
alcanzaron o símbolo máximo, que aquí defínese como unha mestura til, pois
que é o maior personaxe valor ASCII que un usuario pode entrar no
teclado, cando o personaxe alcanzar a max símbolo, así que queremos enviar
ao seu símbolo mínimo, que é un espazo, unha vez máis o menor ASCII
símbolo de valor que un usuario pode escribe no teclado.
>> Entón, nós estamos indo a definir que símbolo mínimo.
E entón nós estamos indo a ir ao seguinte carácter.
Entón, como están os nosos historiadores vai repetir?
Agora ben, se os caracteres válidos son a, b, e c, entón, se iniciou coa,
vai repetir ab, que vai iteración para c.
c é o noso símbolo máximo, entón imos establecer c volta a un, símbolo mínimo.
E entón nós imos repetir índice ao seguinte carácter.
>> Entón, se a estimación inicial foi c, o seguinte personaxe será o nulo
Terminator.
Aquí abaixo, teña en conta que se o personaxe que queremos agora
incremento é o terminador nulo, entón imos configuralo para o
símbolo mínimo.
Polo tanto, se o palpite era c, entón a nosa novo palpite será aa.
E se a nosa suposición orixinal cccc, entón o noso novo palpite
será AAAAA.
>> Así, sempre que chegamos a corda máxima dunha determinada lonxitude, entón estamos
vai aplicar para a secuencia mínima da lonxitude seguinte, que pode
pode ter todos os personaxes de símbolo mínimo.
Agora, o que é esa verificación está facendo aquí?
Ben, se o índice pasou de oitavo carácter ao carácter nove -
entón engadimos oito c de como o noso anterior creo -
a continuación, o contido vai concentrarse na última terminador nulo do noso palpite
matriz, que non se destina a efectivamente pode usar no noso contrasinal.
>> Entón, se estamos enfocados nesa última nulo terminator, entón nós non atopamos unha
contrasinal que é válido utilizar só oito caracteres, o que significa que non hai
contrasinal válida que criptografía a cadea dada.
E nós temos que imprimir iso, dicindo que non conseguimos atopar un válido
contrasinal, e retorno.
Polo tanto, este loop while vai repetir sobre as cordas posibles.
>> Se atopa calquera que criptografía a cadea cifrada esperar, que vai
devolver o contrasinal.
E non atopar nada, entón el pode voltar, a impresión que
non foi capaz de atopar calquera cousa.
Agora, teña en conta que a iteración sobre todos posibles secuencias probablemente vai
tardar un pouco.
Imos realmente ver como tempo que leva.
>> Imos facer o crack.
Ben, oops - di indefinido referencia a cripta.
Entón lembre, ao p define especificación e a páxina de manual a cripta que
necesidade de conectar na cripta.
Agora, o patrón comando make non sabe que
quero usar esta función.
>> Entón, imos copiar esta orde cliente e só engadir ata o final
do mesmo, conectando cripta.
Agora, compila.
Entón imos correr de crack nun determinado cadea cifrada -
a César.
Así, foi moi rápido.
>> Nótese que esta terminou en 13.
Ben, contrasinal cifrada de César pasa a ser 13.
Entón, imos tratar con outro contrasinal.
Imos dar cifrado de Hirschhorn contrasinal e tentar romper iso.
>> Entón, teña en conta que xa chegou tres personaxes.
E nós estamos interactuar sobre as posibles secuencias de tres caracteres.
Isto significa que xa rematar iteración sobre todo un posible e
dúas cadeas de caracteres.
Agora, parece que isto vai tomar algún tempo antes de chegar ao
secuencias de catro caracteres.
Pode levar un par de minutos.
>> Non pasou un par de minutos.
Estamos nas cordas de catro caracteres.
Pero agora, necesitamos iterado sobre todos posibles secuencias de caracteres de catro, que
que pode levar quizais 10 minutos.
E entón, cando chegamos a cinco carácter cordas, necesitamos iterado sobre todos
dos, o que pode levar unhas horas.
E necesitamos iterado sobre as posibles seis caracteres cordas, que
Pode tardar varios días e así por diante.
>> Así, podería ter un potencial moi longo tempo para repetir as posibles
oito caracteres e menos cordas.
Entón, entende que iso non é necesariamente unha algoritmo moi eficiente para atopar
un contrasinal.
Podes pensar que non son as mellores formas.
Por exemplo, o contrasinal ZYX! 32ab probablemente non é un contrasinal moi común,
mentres que o contrasinal é 12345 Probablemente moito máis comúns.
>> Polo tanto, unha forma de tentar atopar un contrasinal máis rápido é só ollar
en contrasinais que son máis comúns.
Así, por exemplo, podemos tratar de ler as palabras dun dicionario e tratar todo
esas palabras como os nosos historiadores contrasinal.
Agora, quizais un contrasinal non é tan sinxelo.
Talvez o usuario foi un pouco intelixente e probe engadir un número para
ao final dunha palabra.
>> Entón, talvez o seu contrasinal foi password1.
Entón podes probar iteración sobre as palabras no dicionario cun
anexada ao final da mesma.
E entón, quizais, despois de facelo, vai achegar a dous para o fin de todo.
>> Ou que o usuario está a tentar ser aínda máis intelixente, e queren que os seus
contrasinal para ser "hacker", pero son vai substituír todas as instancias e de
con tres.
Entón, podería facelo tamén.
Iterado sobre as palabras no dicionario pero substituír caracteres que
parecen números con estes números.
>> Así, deste xeito, pode incorporarse aínda máis contrasinais que son moi comúns.
Pero ao final, o único xeito que pode capturar todos os contrasinais é bruta
forzar iterado sobre todos secuencias de caracteres posibles.
Entón, ao final, ten que repetir sobre as cordas dun personaxe para
oito caracteres, o que pode levar a moito tempo, pero ten que facelo.
>> O meu nome é Rob Bowden.
E este é o crack.