>> ROB Bowden: Mi Rob, kaj ni get krakas.
Do memoras el la pset spec ke ni tuj estos neceso uzi la
kripto funkcio.
Por la viro paĝo, ni havas du hash difini _xopensource.
Ne maltrankviliĝu pri tio ni devas fari tion.
Kaj ankaŭ hash inkluzivas unistd.h.
>> Do iam tio estas de la vojo, ni alveni ĝis la aktuala programo.
Ni unue bezonas fari estas certiĝi la uzanto eniris validan ĉifrita
pasvorton ĉe la komandlinio.
Memoru ke la programo supozas esti fluigos kiel skalara oblikvo fendon, kaj
tiam ĉifrita kordo.
>> Do jen ni kontrolanta certigi ke argc al du se ni volas
daŭrigi kun la programo.
Se argc estas ne du, kiu signifas ĉu la uzanto ne eniris ĉifrita
pasvorton ĉe la komandlinio, aŭ ili eniris pli ol nur la ĉifrita
pasvorton ĉe la komandlinio, en kiu kazo ni ne scias kion fari kun la
komandlinio argumentoj.
>> Do se argc estis du, ni povas daŭrigi.
Kaj tie, ni tuj rakontu variablo ĉifrita.
Tio nur tuj alias la originala argv1 tiel ke tra ĉi
programo, ni ne devas nomi ĝin argv1, kion do vi devos pensi
pri kio fakte signifis.
>> Do fine, ni volas validigi ke la ĉifrita pasvorto de la uzanto
eniris povus esti vere estis ĉifrita pasvorto.
Per la viro paĝo de kripto, la ĉifrita pasvorto devas esti 13
signojn longa.
Ĝis ĉi tie, rimarki ke ni hash difinita ĉifri longon kiel 13.
Do ni simple certigi, ke la korda longeco de la ĉifrita
pasvorto estas 13.
>> Kaj se ĝi ne estas, ni volas por eliri la programon.
Do iam tio estas de la vojo, ni povas nun efektive provi trovi, kion la
pasvorton kiu donis la ĉifrita pasvorto estis.
Tie, ni volas kapti la salo de la ĉifrita pasvorto.
Memoru, por la viro paĝo, ke la unuaj du gravuloj de ĉifrita
ĉeno, kiel ĉi tie -
50ZPJ kaj tiel plu -
la unuaj du karakteroj doni ni la salo, kiu estis uzata
en la kripto funkcio.
>> Kaj tie, ni vidas ke la salo estis ha.
Do ni deziras kopii la unuaj du karakterojn, salo longo esti hash
difinita kiel du.
Ni devas kopii la unuaj du karakteroj en ĉi tiu tabelo, salo.
Rimarku ke ni bezonas salon longo pli , pro tio ni daŭre bezonas nula
terminator al la fino de nia salo.
>> Tiam ni iras por deklari ĉi tabelo, gasto, de amplekso max longo pli
, kie maks longo estas hash difinita kiel ok, ekde la maksimuma pasvorton
Estas ok signojn longa.
Kaj ni tuj uzi ĉi persisti super ĉiuj ebla kordoj kiuj povis
validus pasvortojn.
Do se la validajn signojn en pasvorton Estis nur, b, kaj c, tiam
ni devus persisti super a, b, c, aa, ba, ca, kaj tiel plu, ĝis
ni atingos vidi cccccccc -
ok c aj jaroj.
>> Kaj se ni ne havus tian malsupren validan pasvorto, tiam ni devas diri ke la
ĉifrita kordo ne estis valida por komenci.
Do nun, ni atingos ĉi tion dum 1 buklo.
Rimarku ke tio signifas ke estas malfinia ciklo.
>> Rimarku ne estas rompo komunikaĵo ene de ĉi senfina iteracio.
Ekzistas nur reveni deklaroj.
Do ni neniam vere atendas por eliri la banton.
Ni nur atendas por eliri la programon.
Mi aldonis tiun print deklaro al la supro de tiu buklo al nur elprinti
kio nia aktuala konjekton en kion la pasvorto estas.
>> Nun, kio ĉi buklo faras?
Ĝi estas looping super ĉiuj ebla kordoj kiu povus esti valida pasvortojn.
La unua afero, ni tuj faros estas prenu nian aktualan konjekton pro kio la
pasvorto estas.
Ni prenos la salo kiu ni kaptis el la kodita ĉeno, kaj ni estas
tuj ĉifri la konjekton.
Ĉi tio donos al ni ĉifrita konjekto, kiun ni iras kompare kontraŭ
la kodita ĉeno kiu la uzanto eniris en la komandlinio.
>> Se ili estas la sama, en kiu kazo kordo komparebla revenos nulo, se
ili estas la sama, tiam diveni estis la pasvorton kiu generis la ĉifrita
kordo, en kiu kazo oni povas presi ke kiel nia pasvorton kaj reveno.
Sed se ili ne estis la sama, kiu signifas nia diveno malĝusta.
>> Kaj ni volas persisti por la venonta valida konjekton.
Do, tio estas kion tio dum buklo provas fari.
Ĝi okazas ankaŭ persisti en nia konjekton al la sekvanta valida konjekton.
Rimarku, ke kiam ni diras ke aparta karaktero de nia diveno havas
atingis la max simbolo, kiu ĉi tien estas hash difinita kiel supersigno, ekde
tio estas la plej granda ASCII valoro karaktero ke uzanto povas eniri en la
klavaro, kiam la karaktero atingas la maks simbolon, tiam ni volas sendi
ĝin al la minimuma simbolo, kiu estas spaco, denove la plej malalta ASCII
valoro simbolo kiun uzanto povas eniri ĉe la klavaro.
>> Do ni tuj starigu ke al la minimuma simbolo.
Kaj tiam ni tuj iru al la venonta signo.
Do kiel estas niaj konjektoj tuj persisti?
Nu, se la validaj signoj estas a, b, kaj c, tiam se ni komencis kun a,
ĝi devos persisti al b, tio instruos vin persisti al c.
c estas nia maks simbolo, tial ni starigis c reen al, la minimuma simbolo.
Kaj tiam ni devos persisti indekso al la sekvanta signo.
>> Do, se la originala diveno c, la sekvanta karaktero tuj estos la nula
terminator.
Cxi tie, rimarki ke se la karaktero ke ni nun volas
pliigo estis la nula terminator, tiam ni tuj starigu gxin al la
minimuma simbolo.
Do se la diveno c, tiam nia novan konjekton tuj estos aa.
Kaj se nia originala diveno CCCC, tiam nia nova konjekton
tuj estos aaaaa.
>> Do kiam ajn ni atingas la maksimuman kordo de donita longo, tiam ni estas
tuj apliki al la minimuma kordo de la venonta longitudo, kiu estos
nur estu ĉiuj karakteroj de la minimuma simbolo.
Nun, kio ĉi ĉekon faras ĉi tie?
Nu, se index kopiis de la oka karakteron al la naŭ karaktero -
do ni aldonos ok c estas kiel nia antaŭa diveni -
tiam indekso tuj enfokusigi la lasta nula terminator de nia diveno
tabelo, kiu ne intencis efektive esti uzata en nia pasvorton.
>> Do, se ni enfokusigas sur tiu lasta nula Terminator, tiam ni ne trovis
pasvorton kiu estas valida uzante nur ok karakterojn, kiu signifas ne ekzistas
valida pasvorton kiu encrypts al la donita linio.
Kaj ni devas presi, kiu jene Ni ne povis trovi validan
pasvorto, kaj reveni.
Do tio dum buklo tuj persisti super ĉiuj ebla kordoj.
>> Se ĝi trovas neniun kiu encrypts al la atendis ĉifrita ĉenon, tio instruos vin
revenu ke pasvorton.
Kaj ĝi ne trovas ion, tiam ĝi revenos, presi ke
ne povis trovi nenion.
Nun, rimarki ke ripetanta super ĉiuj ebla kordoj estas probable tuj
preni momenton.
Ni efektive vidi kiel longa kiu portas.
>> Ni faru fendo.
Nu, oops - diras nedefinita referenci al kripto.
Do memoru, por la p aroj spec kaj Ankaŭ la viro paĝo por kripto, ke ni
bezonas ligi en kripto.
Nun, la defaŭlta faru komandon Ne scias ke vi
volas uzi tiun funkcion.
>> Do ni kopias ĉi kliento komando kaj simple aldonu al la fino
pri tio, ligante kripto.
Nun, ĝi kompilas.
Do ni kuros fendo sur donita ĉifrita kordo -
tiel Cezaro.
Por ke estis sufiĉe rapide.
>> Rimarku ke ĉi finiĝis je 13.
Nu, Cezaro ĉifrita pasvorto hazarde estas 13.
Do ni provu alian pasvorton.
Ni prenu Hirschhorn estas ĉifrita pasvorto kaj provi krakas tio.
>> Do rimarki ni jam atingis tri signojn.
Kaj ni ripetanta super ĉiuj ebla tri-karaktero ŝnuroj.
Tio signifas ke ni jam fini ripetanta super ĉiuj ebla kaj
du karaktero ŝnuroj.
Nun, ĝi aspektas kiel ĉi tio tuj preni momenton antaŭ ol ni atingos la
kvar karaktero ŝnuroj.
Eble kelkaj minutoj.
>> Ĝi ne postrestis kelkaj minutoj.
Ni estas sur la kvar-karaktero ŝnuroj.
Sed nun, ni bezonas ankaŭ persisti super ĉiuj eble kvar karaktero ŝnuroj, kiuj
kiuj povus fari eble 10 minutoj.
Kaj poste kiam ni atingos kvin karaktero kordoj, ni bezonas ankaŭ persisti super ĉiuj
de tiuj, kiuj povus prenu paron horoj.
Kaj ni bezonas ankaŭ persisti super ĉiuj ebla ses-karaktero ŝnuroj, kiuj
povus preni kelkajn tagojn kaj tiel plu.
>> Do ĝi povus preni potenciale tre longa tempon por persisti super ĉiuj ebla
ok-karaktero kaj malpli da kordoj.
Do rimarki ke tiu ne estas nepre tre kompetenta algoritmo por trovi
pasvorto.
Vi povus pensi, ke tie estas pli bonaj manieroj.
Ekzemple, la pasvorton ZYX! 32ab Probable ne estas tre komuna pasvorton,
dum la pasvorton 12345 estas verŝajne multe pli komuna.
>> Do unu vojo klopodante trovi pasvorton pli rapide estas simple rigardu
ĉe pasvortoj, kiu estas pli komuna.
Do ekzemple, ni povas provi legi vortojn el vortaro kaj provi ĉiujn
tiuj vortoj kiel nia pasvorton divenas.
Nun, eble pasvorton ne estas tiel simpla.
Eble la uzanto estis tiel ruza kaj provi appending numero al
la fino de vorto.
>> Do eble ilia pasvorto estis password1.
Do vi povas provi ripetanta super ĉiuj vortoj en la vortaro per unu
aldonita ĉe la fino de ĝi.
Kaj tiam eble post fari tion, vi instruos vin postglui al du al la fino de ĝi.
>> Aŭ eble la uzanto provas esti eĉ pli lerta, kaj ili volas lian
pasvorto estu "hacker", sed ili estas tuj anstataŭi ĉiujn petskribojn de e la
kun triope.
Tiel vi povus fari tion ankaŭ.
Persisti super ĉiuj vortoj en la vortaro sed anstataŭi karakteroj kiuj
aspektas kiel numeroj kun tiuj numeroj.
>> Do tiu vojo, vi povus kapti eĉ pli pasvortoj, kiu estas sufiĉe komuna.
Sed en la fino, la sola maniero vi povas kapti ĉiujn pasvortojn estas malpura
devigi persisti super ĉiuj ebla kordoj.
Tiel en la fino, vi bezonos ankaŭ persisti super ĉiuj kordoj de unu signo por
ok karakteroj, kiu povus preni tre longa tempo, sed vi devas fari.
>> Mia nomo estas Rob Bowden.
Kaj jen estas Crack.