>> ROB: Hi, saya Rob, dan mari kita mentafsirkan program Vigenere.
Perkara itu kita perlu lakukan ialah membuat memastikan pengguna memasukkan apa yang kita harapkan
mereka di garisan Command.
Jadi jika argc bukan 2 yang bermakna sama ada pengguna tidak memasukkan kita tali
mahu menggunakan sebagai menyulitkan kami tali, atau mereka
memasuki terlalu banyak perkara.
Dan kita tidak tahu apa yang perlu dilakukan dengan perkara-perkara lain.
>> Oleh itu, kita memberitahu mereka apa yang mereka sepatutnya dimasukkan.
Dan kita kembali.
Sekarang, dengan anggapan bahawa argc adalah 2, kita boleh terus dengan seluruh program ini.
>> Kami alias nama argv [1]
ke dalam kata kunci yang berubah-ubah.
Supaya kita tidak perlu menggunakan argv nama [1]
di seluruh negara lain program ini.
Dan mungkin kita akan lupa apa yang bermakna dan sebagainya.
Kata kunci adalah nama yang jauh lebih bagus.
Dan kami akan segera merebut panjang kata kunci kami di sini.
>> OK, jadi sekarang kita mahu pastikan kata kunci kami adalah benar-benar sah.
Kata kunci yang kita gunakan untuk menyulitkan tali hanya perlu abjad
aksara.
Jika pengguna memasuki bukan abjad- aksara, kita tidak mengatakan, kata kunci
sahaja perlu mengandungi melalui A Z dan kemudian kembali.
Jadi ini untuk iterates gelung ke atas semua watak-watak kata kunci kami, memeriksa
bahawa jika seseorang tidak abjad kemudian kita perlu mencetak amaran itu.
>> Sekarang, sebaik sahaja kami sampai ke tahap ini, kita tahu yang tali hendaklah betul.
Kata kunci mestilah betul.
Dan sekarang kita perlu mendapatkan mesej dari pengguna yang mereka mahu kita
menyulitkan dengan frasa utama.
Jadi untuk mendapatkan mesej itu, kita mempunyai lakukan semasa gelung yang akan
terus mendapatkan rentetan dari pengguna sehingga mereka memasuki tali yang sah.
>> Berterusan, kita lihat di sini berubah-ubah ini, int nun_letters_seen.
Kita akan melihat mengapa kita perlu bahawa dalam satu saat.
Tetapi ini untuk gelung akan melelar dari i sama dengan 0 semua jalan sehingga i
sama n, yang bermakna kita iterating ke atas semua mungkin
watak-watak dalam mesej kami.
Kerana kita mahu untuk menyulitkan semua watak-watak dalam mesej kami.
Jadi notis kita lakukan jika (isalphamessage [I], kerana kita tidak mahu menyulitkan
watak-watak yang tidak abjad.
Jika ada simbol, ruang, atau nombor, kita tidak
ingin menyulitkan mereka.
>> Sekarang, dengan anggapan bahawa ia adalah abjad, kita mula-mula mahu memikirkan apa yang kita
sebenarnya ingin menyulitkan mesej tersebut menggunakan.
Jadi, apa yang saya maksudkan dengan itu?
>> Mari kita andaikan bahawa frasa utama pengguna memasuki adalah abc.
Itulah yang kita gunakan untuk menyulitkan.
Sekarang, naif, kita berfikir bahawa bermakna kita mahu untuk menyulitkan aksara pertama
mesej kami dengan 0, kerana cara berputar watak 0.
>> Kami mahu menyulitkan watak kedua sebanyak 1, watak ketiga sebanyak 2,
watak keempat dengan 0, kelima sebanyak 1, keenam dengan 2, dan sebagainya.
Tetapi ingat, bahawa kita ingin melangkau ruang dan simbol dan nombor.
Ini bermakna bahawa jika pengguna telah memasuki dunia hello sebagai mesej
yang mereka mahu untuk menyulitkan, maka kita mahu untuk menyulitkan h dengan 0
bersamaan dengan itu, e dengan 1, l 2, l dengan 0, o dengan 1.
Kami mahu melangkau ruang, disulitkan w sebanyak 2, o dengan 0, 1, 2, 0.
Jadi notis, jika kami tidak tidak menyertai ruang, maka kita akan disulitkan
w oleh 0 dan berakhir dengan rentetan tidak betul.
>> OK, ini adalah apa yang kita perlukan pembolehubah num_letters_seen untuk.
Jika kita hanya akan menyulitkan menggunakan kaedah ini, yang tidak melangkau
simbol, ruang, dan nombor, maka kita hanya boleh menggunakan pembolehubah i seperti apa
kepada indeks menjadi frasa utama kami dengan.
Kita perlu menggunakan num_letters_seen untuk menjaga menjejaki tempat sebenar dalam
frasa utama yang kita mahu index.
Jadi di sini, jika kata kunci yang kita ada, jika num_letter_seen arena keyword_length, jadi
mengapa kita perlu arena oleh panjang kata kunci?
>> Well, hello dunia adalah contoh yang baik.
Jika kata kunci tersebut adalah abc, maka kita perlu untuk terus menyulitkan oleh kemudian b
kemudian c, kemudian balut kembali sekitar, a, b, c, a, b, c.
Oleh itu, kita perlu arena oleh panjang kata kunci untuk balut kembali sekitar.
>> Jadi, jika ini adalah huruf besar, maka kita ingin menyulitkan oleh
kedudukan surat itu dalam abjad, mana kita dapat dengan hanya
menolak keluar modal A. Dan begitu juga, untuk huruf kecil, kita
boleh mendapatkan kunci yang kita mahu dengan menolak keluar huruf kecil a.
Jadi, tanpa mengira sama ada surat itu dalam frasa utama adalah modal atau
huruf kecil, kita akan menyulitkan dengan jumlah yang sama.
>> Sekarang kita mempunyai utama kami, kami lihat di sini, bahawa jika mesej i adalah huruf besar satu
watak, maka kita mahu untuk mengira kedudukan dalam abjad yang
watak, menambah utama kami kepadanya, balut kembali sekitar supaya jika kami pergi lalu
z kita kembali kepada a, b, c, dan sebagainya.
Kemudian, akhirnya, menambah semula modal A. Jadi kita beralih semula ke dalam [itu? Ascii?]
pelbagai watak-watak ini dan bukannya kedudukan angka dalam abjad
watak-watak ini.
>> Dan kita melakukan perkara yang sama untuk aksara huruf kecil.
Kecuali kita mahu tolak keluar huruf kecil dan menambahkan kembali di dalam
akhir, huruf kecil a.
Notis num_letter_seen yang hanya incremented jika mesej i adalah
abjad.
Ini adalah bagaimana kita skip ruang, simbol, dan nombor dalam frasa utama kami, sejak
num_letter_seen adalah apa yang kita gunakan kepada indeks ke dalam kata kunci kami.
>> Akhir sekali, pada akhirnya, kini mesej yang i telah disulitkan, kami
mencetak mesej i.
Dan itu sahaja.
Nama saya Rob.
Dan ini adalah Vigenere.
>> [MUZIK Bermain]