ROB Bowden: Saya Rob, dan mari kita retak. Jadi ingat dari spec pset yang kami akan perlu menggunakan fungsi kubur. Untuk halaman lelaki itu, kita mempunyai dua hash menentukan _xopensource. Jangan bimbang tentang mengapa yang perlu kita lakukan itu. Dan juga termasuk unistd.h hash. Jadi sekali itu keluar dari jalan, mari kita mendapat program sebenar. Perkara pertama yang perlu kita lakukan ialah memastikan pengguna memasuki disulitkan sah password pada baris arahan. Ingat bahawa program ini sepatutnya akan berjalan seperti dot slash retak, dan kemudian rentetan disulitkan. Jadi di sini kita memeriksa untuk memastikan yang argc dua jika kita mahu meneruskan program ini. Jika argc bukan dua, yang bermakna sama ada pengguna tidak memasukkan disulitkan password pada baris arahan, atau mereka memasuki lebih daripada sekadar disulitkan password pada baris arahan, di mana kes kita tidak tahu apa yang perlu dilakukan dengan line hujah perintah. Jadi jika argc adalah dua, kita boleh terus. Dan di sini, kita akan mengisytiharkan yang disulitkan berubah-ubah. Itu hanya akan alias asal argv1 supaya seluruh ini program, kita tidak perlu memanggilnya argv1, yang kemudian anda perlu berfikir tentang apa yang benar-benar bermakna. Jadi akhirnya, kami mahu mengesahkan bahawa kata laluan disulitkan pengguna boleh memasuki sebenarnya telah kata laluan disulitkan. Setiap halaman lelaki itu daripada kubur itu, kata laluan disulitkan mesti 13 huruf. Di sini, melihat bahawa kita hash ditakrifkan menyulitkan panjang sebagai 13. Jadi, kita hanya membuat memastikan bahawa panjang rentetan disulitkan kata laluan adalah 13. Dan jika ia tidak, kita mahu untuk keluar dari program ini. Jadi sekali itu keluar dari jalan, kita boleh sekarang sebenarnya cuba untuk mencari apa yang kata laluan yang memberikan disulitkan kata laluan itu. Di sini, kita mahu merebut garam daripada kata laluan disulitkan. Ingat, setiap halaman lelaki itu, bahawa dua watak pertama disulitkan string, seperti di sini - 50ZPJ dan sebagainya - pertama dua watak memberi kami garam yang digunakan dalam fungsi kubur. Dan di sini, kita lihat bahawa garam adalah ha. Jadi kita mahu menyalin dua pertama watak-watak, panjang garam menjadi hash ditakrifkan sebagai dua. Kita perlu menyalin pertama dua watak ke dalam pelbagai ini, garam. Perhatikan bahawa kita perlu panjang garam ditambah satu, kerana kita masih perlu batal yang terminator pada akhir garam kami. Kemudian kita akan mengisytiharkan pelbagai ini, tetamu, saiz panjang max plus satu, di mana panjang max adalah hash ditakrifkan lapan, kerana kata laluan maksimum lapan aksara. Dan kita akan menggunakan ini untuk melelar atas semua tali yang mungkin boleh menjadi kata laluan yang sah. Jadi, jika watak-watak sah kata laluan hanya a, b, dan c, maka kita akan melelar atas a, b, c, aa, ba, ca, dan sebagainya, sehingga kita dapat melihat cccccccc - lapan c ini. Dan jika kita tidak mempunyai ke bawah yang sah kata laluan, maka kita perlu untuk mengatakan bahawa rentetan disulitkan tidak sah untuk memulakan. Jadi sekarang, kita mencapai ini manakala 1 gelung. Perhatikan bahawa bermakna ia gelung tak terhingga. Notis tiada pernyataan break dalam gelung ini tidak terbatas. Terdapat hanya kembali kenyataan. Oleh itu, kita sebenarnya tidak pernah mengharapkan untuk keluar dari gelung. Kita hanya mengharapkan untuk keluar dari program ini. Saya tambah kenyataan cetak ini kepada atas gelung ini hanya mencetak apa tekaan semasa kami di apa kata laluan itu. Kini, apa yang gelung ini lakukan? Ia gelung ke atas semua tali mungkin yang boleh menjadi kata laluan yang sah. Perkara pertama yang kita akan lakukan adalah mengambil tekaan semasa kami untuk apa kata laluan. Kami akan mengambil garam yang kita meraih daripada rentetan disulitkan, dan kami akan menyulitkan meneka. Ini akan memberikan kita rasa disulitkan, yang kita akan membandingkan terhadap rentetan disulitkan bahawa pengguna dimasukkan pada baris arahan. Jika mereka yang sama, di mana rentetan setanding akan kembali sifar, jika mereka yang sama, maka rasa adalah kata laluan yang dijana disulitkan tali, di mana kita boleh mencetak bahawa sebagai kata laluan dan kembali. Tetapi jika mereka tidak sama, yang bermakna tekaan kami adalah tidak betul. Dan kita mahu untuk melelar tekaan yang sah akan datang. Jadi itulah yang selama ini gelung cuba lakukan. Ia akan melelar tekaan kami untuk meneka yang sah akan datang. Perhatikan bahawa apabila kita mengatakan bahawa watak tertentu dalam tekaan kita mempunyai mencapai simbol max, yang di sini hash adalah ditakrifkan sebagai tilde, kerana itulah watak nilai ASCII terbesar yang pengguna boleh memasukkan di keyboard, apabila watak sampai ke max simbol, maka kita mahu menghantar ia kembali ke simbol minimum, yang ruang yang, sekali lagi ASCII yang paling rendah simbol nilai yang pengguna boleh masuk pada papan kekunci. Jadi kita akan menetapkan bahawa kepada simbol minimum. Dan kemudian kita akan pergi ke watak yang akan datang. Jadi bagaimana tekaan kami akan melelar? Nah, jika watak-watak yang sah ialah a, b, dan c, maka jika kita bermula dengan, ia akan melelar untuk b, ia akan melelar untuk c. c adalah simbol max kita, maka kita akan menetapkan c kembali ke, simbol minimum. Dan kemudian kita akan melelar indeks dengan watak yang akan datang. Jadi jika meneka asal c, seterusnya watak akan menjadi nol terminator. Down di sini, perhatian bahawa jika watak bahawa kita kini mahu kenaikan adalah null, maka kita akan menetapkan ke simbol minimum. Jadi jika meneka adalah c, maka kami tekaan baru akan menjadi aa. Dan jika rasa asal kami adalah CCCC, maka tekaan baru kami akan menjadi aaaaa. Jadi apabila kita mencapai tali maksimum panjang yang diberikan, maka kami akan melaksanakan untuk rentetan minimum panjang akan datang, yang akan hanya menjadi semua watak-watak simbol minimum. Kini, apa yang cek ini buat di sini? Nah, jika indeks berpindah dari kelapan watak watak sembilan - jadi kami menambah lapan c sebagai kami sebelum rasa - maka indeks akan memberi tumpuan kepada lepas null meneka kami pelbagai, yang tidak bermaksud untuk benar-benar digunakan dalam laluan kami. Jadi, jika kita memberi tumpuan kepada yang batal lepas terminator, maka kita tidak menemui kata laluan yang sah yang menggunakan hanya lapan watak-watak, yang bermaksud tidak ada kata laluan yang sah yang menyulitkan kepada rentetan yang diberikan. Dan kita perlu mencetak itu, berkata kami tidak dapat mencari yang sah kata laluan, dan kembali. Jadi gelung sementara ini akan melelar atas segala tali mungkin. Jika ia mendapati apa-apa yang menyulitkan kepada rentetan disulitkan dijangka, ia akan kembali kata laluan itu. Dan ia tidak mencari apa-apa, maka ia akan kembali, percetakan bahawa ia tidak dapat mencari apa-apa. Sekarang, melihat bahawa iterating ke atas semua tali mungkin mungkin akan mengambil sedikit masa. Mari kita benar-benar melihat bagaimana panjang yang mengambil masa. Mari kita membuat retak. Nah, oops - ia berkata undefined rujukan kepada kubur. Jadi ingat, untuk p menetapkan spesifikasi dan juga halaman lelaki untuk kubur kita perlu untuk menghubungkan dalam kubur. Sekarang, lalai membuat perintah tidak tahu bahawa anda mahu menggunakan fungsi itu. Jadi mari kita tulis arahan pelanggan ini dan hanya menambah kepada akhir itu, kubur menghubungkan. Kini, ia menyusun. Jadi mari berjalan keretakan yang diberikan rentetan disulitkan - maka beliau Caesar. Jadi yang agak cepat. Perhatikan bahawa ini berakhir pada 13. Nah, kata laluan disulitkan Caesar berlaku untuk menjadi 13. Jadi mari kita cuba kata laluan yang lain. Mari kita disulitkan Hirschhorn ini kata laluan dan cuba keretakan itu. Jadi notis kita sudah mencapai tiga watak. Dan kami iterating atas semua mungkin rentetan tiga watak. Ini bermakna kita sudah selesai iterating atas semua salah satu mungkin dan dua tali watak. Sekarang, ia kelihatan seperti ini akan mengambil sedikit masa sebelum kita mencapai rentetan empat watak. Ia mungkin mengambil masa beberapa minit. Ia tidak mengambil masa beberapa minit. Kami di tali empat watak. Tetapi sekarang, kita perlu melelar atas segala mungkin rentetan empat-watak, yang yang mungkin mengambil mungkin 10 minit. Dan kemudian apabila kita mencapai lima watak tali, kita perlu melelar atas segala dari orang-orang, yang mungkin mengambil masa beberapa jam. Dan kita perlu melelar atas segala kemungkinan enam watak tali, yang mungkin mengambil masa beberapa hari dan sebagainya. Jadi ia boleh mengambil berpotensi sangat lama masa untuk melelar atas segala kemungkinan lapan-watak dan kurang tali. Jadi melihat bahawa ini tidak semestinya algoritma yang sangat berkesan untuk mencari kata laluan. Anda mungkin berfikir bahawa terdapat cara yang lebih baik. Sebagai contoh, ZYX password! 32ab mungkin tidak adalah kata laluan yang biasa, manakala kata laluan 12345 adalah mungkin banyak yang lebih biasa. Jadi salah satu cara untuk cuba untuk mencari kata laluan lebih cepat adalah untuk hanya melihat pada kata laluan yang lebih biasa. Sebagai contoh, kita boleh cuba untuk membaca perkataan daripada kamus dan cuba semua kata-kata sebagai tekaan kata laluan kami. Sekarang, mungkin kata laluan tidak begitu mudah. Mungkin pengguna itu adalah agak bijak dan cuba appending nombor kepada akhir perkataan. Jadi mungkin kata laluan mereka adalah password1. Jadi, anda boleh cuba iterating atas semua perkataan dalam kamus dengan satu dilampirkan ke akhir itu. Dan kemudian mungkin selepas berbuat demikian, anda akan menambah dua hingga akhir itu. Atau mungkin pengguna yang cuba untuk menjadi lebih lebih bijak, dan mereka mahu mereka kata laluan untuk menjadi "hacker," tetapi mereka akan menggantikan semua kejadian e ini dengan tiga. Jadi, anda boleh melakukan ini juga. Melelar atas semua perkataan di dalam kamus tetapi menggantikan watak-watak yang kelihatan seperti nombor dengan nombor-nombor. Jadi cara ini, anda boleh menangkap lebih kata laluan yang agak biasa. Tetapi pada akhirnya, satu-satunya cara anda boleh menangkap semua kata laluan adalah untuk kasar memaksa melelar atas segala tali mungkin. Jadi pada akhirnya, anda perlu melelar atas semua rentetan dari satu watak kepada lapan aksara, yang mungkin mengambil masa yang lama, tetapi anda perlu untuk melakukannya. Nama saya Rob Bowden. Dan ini adalah Crack.