Роб BOWDEN: Јас сум Роб, и ајде да напукнување. Значи се сеќавам од pset спецификации што ние ќе треба да биде потребна да се користат криптата функција. За човекот страница, имаме две хаш се дефинира _xopensource. Не грижете се за тоа зошто ние треба да го направите тоа. А исто така и хаш вклучуваат unistd.h. Па еднаш тоа е надвор на патот, да ги се дојде до вистинската програма. Првото нешто што ние треба да направите е да бидете сигурни корисникот важечка шифрирана лозинка на командната линија. Се сеќавам дека програмата би требало да се кандидира како dot коса црта напукнуваат, и потоа шифрирана стринг. Па еве ние сме проверка за да бидете сигурни дека дека argc до два ако сакаме да продолжи со програмата. Ако argc не е два, тоа значи или корисникот не влезе во шифрирана лозинка на командната линија, или тие влезе нешто повеќе отколку само шифрирана лозинка на командната линија, во која случај ние не знаеме што да правиме со командната линија аргументи. Па ако argc беше два, ние може да продолжи. И тука, ние ќе треба да се изјасни променлива енкриптирани. Тоа е само случува да алијас на оригиналот argv1, така што во текот на овој програма, ние немаме да го наречеме argv1, кои потоа мора да се размислува за она што всушност значеше. Значи, конечно, ние сакаме да се провери дека шифрирана лозинка на корисникот влезе можеше да всушност биле шифрирана лозинка. На човекот страница од криптата, на шифрирана лозинка мора да биде 13 карактери. До тука, забележи дека ние хаш дефинирани криптирате должина како 13. Па ние сме само што си сигурен дека стринг должина на шифрирана лозинка е 13. И ако тоа не е, ние сакаме да излезете од програмата. Па еднаш тоа е надвор од патот, можеме да сега всушност се обидуваат да го најдете тоа што го лозинка кој му даде шанса на криптирана лозинка беше. Тука, ние сакаме да го дофати сол од шифрирана лозинка. Се сеќавам, на човекот страница, дека првите две букви на шифрирана стринг, како тука - 50ZPJ и така натаму - првите две букви даде ни на сол кое се користи во криптата функција. И тука, можеме да видиме дека сол беше ха. Затоа сакаме да го копирате првите две карактери, сол должина е хаш дефинирана како два. Ние треба да го копирате првите две букви во оваа низа, сол. Забележете дека ние треба сол должина плус еден, бидејќи ние се уште треба е нулти терминатор на крајот на нашата сол. Тогаш ние ќе треба да пријават тоа низа, гостин, на големината max должина плус еден, каде макс должина е хаш дефинирани што осум, бидејќи максималната лозинка е осум карактери. И ние ќе го користат ова за да iterate над сите можни стрингови кои би можеле да биде валиден лозинки. Значи, ако валидна карактери во лозинка беа само, b и c, тогаш ние ќе iterate над а, б, в, AA, диплома, кариера, и така натаму, се додека ние се да се види cccccccc - осум на c. И ако ние не имаат долу валидна лозинка, тогаш ние треба да се каже дека шифрирана стринг не беше валидни да почне. Па сега, доаѓаме до тоа додека 1 јамка. Забележите дека значи дека е бесконечна јамка. Забележите не постојат пауза изјава во внатрешноста на оваа бесконечна јамка. Има само се врати извештаи. Па никогаш ние всушност очекувате да излезете од јамка. Ние очекуваме само да излезете од програмата. Јас додадов оваа печати изјава до Згора на тоа јамка само да испечатите она што нашите сегашни погоди во она што лозинка е. Сега, она што е овој циклус правиш? Тоа е looping преку сите можни стрингови кои би можеле да бидат валидни лозинки. Првото нешто што ние ќе треба да направите е да земе нашите сегашни претпоставка за тоа што лозинка е. Ние ќе преземе сол што ние го грабнала од шифрирана стринг, и ние сме случува да го криптирате погоди. Тоа ќе ни даде шифрирана погоди, кои ние ќе треба да се споредат против шифрирана стринг кој на корисникот влезе во командната линија. Ако тие се исти, во кој случај низа споредливи ќе се врати нула, ако тие се исти, а потоа погоди беше лозинка кои генерирана за шифрирана стринг, во кој случај можеме да печатиме дека како што е нашата лозинка и враќање. Но, ако тие не се исти, дека значи дека нашите претпоставка е неточна. И ние сакаме да iterate да следниот валидна се погоди. Значи тоа е она што ова додека јамка се обидува да се направи. Тоа се случува да iterate нашата претпоставка на следната валидна се погоди. Забележете дека кога велиме дека особено лик во нашата претпоставка има достигна симбол Макс, кои до тука е хаш дефинирано како тилда, бидејќи тоа е најголемиот ASCII вредност карактер дека корисникот може да влезе на тастатура, кога ликот достигне Макс симбол, тогаш сакаме да испратиме се врати на минимум симбол, кој е просторот, повторно најниска ASCII вредност симбол кој што корисникот може да внесете на тастатурата. Па ние ќе да ја постави таа на минимум симбол. И тогаш ние ќе треба да се оди на следниот карактер. Па, како се нашите нагаѓања ќе iterate? Па, ако валидна ликови се А, Б, и в, тогаш ако почнавме со, тоа ќе iterate до Б, тоа ќе iterate на в. в е нашиот максимум симбол, па ние ќе се постави в назад кон, минималната симбол. А потоа ние ќе iterate индекс на следниот знак. Па ако оригиналот претпоставка беше в, следниот карактер ќе биде на нула терминатор. Долу тука, забележуваат дека ако карактер дека ние сега сакаме да прираст изнесувал на нула терминатор, тогаш ние ќе треба да го поставите на минимум симбол. Па ако се погоди беше в, тогаш нашата нова претпоставка ќе биде аа. И ако нашата изворна претпоставка беше cccc, тогаш нашиот нов погоди ќе биде aaaaa. Па секогаш кога ќе достигнете максимумот на низа на дадена должина, тогаш ние сме ќе се спроведе на минимум низа на следната должина, што ќе само да се сите знаци на минималните симбол. Сега, она што е оваа проверка правиш тука? Па, ако индекс се пресели од осмиот карактер на девет карактер - па го додаваме осум в како нашите претходни погоди - потоа индекс се случува да се фокусираат на последните null терминатор на нашата претпоставка низа, која не е наменета за да всушност да се користи во нашата лозинка. Значи, ако ние сме фокусирани на тој последен нула терминатор, тогаш ние не се најде лозинка која е валидна користење на само осум ликови, што значи не постои важечка лозинка која encrypts на дадениот стринг. И ние треба да се печати тоа, велејќи не можевме да најдеме валиден лозинка, и да се врати. Па ова додека јамка се случува да iterate над сите можни стрингови. Ако утврди било која encrypts на очекува шифрирана стринг, тоа ќе се врати таа лозинка. И тоа не се најде ништо, а потоа ќе се врати, печатење дека тоа не беше во можност да се најде ништо. Сега, забележите дека процесирањето над сите можни стрингови е веројатно нема да да потрае некое време. Ајде да видите колку всушност долго што е потребно. Да се ​​направи пукнатина. Па, упс - се вели недефиниран повикување на криптата. Значи се сеќавам, за стр поставува спецификации и исто така, човекот страница за криптата дека ние треба да се поврзат во криптата. Сега, стандардно направи команда не знае дека сте сакате да го користите таа функција. Па ајде да го копирате овој клиент команда и само додадете на крајот од неа, поврзувајќи криптата. Сега, го компајлира. Значи, да се кандидира пукнатината на дадена шифрирана низа - па Цезар. Така што беше прилично брзо. Забележете дека ова заврши на 13. Па, Цезар шифрирана лозинка се случува да биде 13. Па ајде пробајте друг лозинка. Ајде да ги Hirschhorn е криптирана лозинка и обидете се напукнување тоа. Па забележите ние сме веќе достигна три карактери. И ние сме процесирањето над сите можни три-карактер жици. Тоа значи дека ние сме веќе заврши процесирањето над сите можни еден и два карактер жици. Сега, тоа би изгледало вака се случува да се да потрае некое време пред да стигнат до четири карактер жици. Тоа може да потрае неколку минути. Тоа не да биде неколку минути. Ние сме на четири карактер жици. Но, сега, ние треба да iterate над сите можно четири-карактер жици, кои тоа може да потрае можеби 10 минути. А потоа кога ќе стигнат до пет карактери стрингови, ние треба да iterate над сите од оние, кои би можеле да потрае неколку часа. И ние треба да iterate преку сите можни шест карактер жици, кои може да потрае неколку дена и така натаму. Па тоа би можело да потрае потенцијално многу долго време да iterate преку сите можни осум карактери и помалку жици. Па забележите дека ова не е нужно многу ефикасен алгоритам за наоѓање на лозинка. Можеби мислите дека има се подобри начини. На пример, лозинка zyx! 32ab веројатно не е многу честа лозинка, со оглед на лозинка 12.345 е веројатно многу почести. Значи еден од начините да се обидува да се најде на лозинка побрзо е да се само погледнете на лозинки кои се се почести. Така на пример, можеме да се обидеме да ги прочитате зборови од речникот и обидете се сите на овие зборови како наш лозинка нагаѓања. Сега, можеби лозинка не е толку едноставна. Можеби на корисникот е малку паметен и обидете додавање на бројот на на крајот на зборот. Па можеби нивните лозинка беше password1. Па може да се обидете процесирањето над сите зборови во речникот со една додава на крајот од неа. А потоа можеби и откако ќе го направите тоа, ќе додаваат два до крајот на тоа. Или можеби на корисникот се обидува да биде дури и повеќе умен, и тие сакаат нивните лозинка за да се биде "хакер", но тие се ќе ги замени сите случаи на на e со дрва. Па може да го направите ова е премногу. Iterate над сите зборови во речникот но замени ликови кои изгледа како броеви со тие бројки. Па на овој начин, може да се фати дури и повеќе лозинки кои се прилично честа. Но, на крајот, единствениот начин можете да фаќање на сите лозинки е да брутална сила iterate над сите можно жици. Па на крајот, вие не треба да iterate над сите жици од еден знак осум карактери, која може да потрае многу долго време, но вие треба да го направи тоа. Моето име е Роб Бауден. И ова е попуштат.