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