>> [Bermain muzik]
>> ZAMYLA CHAN: Mari kita melaksanakan Vigenere, yang lebih sedikit
mendapatkan cipher daripada Caesar.
Teks biasa adalah enciphered menggunakan rentetan bukan integer.
Setiap watak dalam abjad teks beralih oleh
surat dalam kata kunci.
>> Dalam contoh ini, kata kunci ohai, O sepadan dengan peralihan 14; H kepada
beralih daripada 7; A, peralihan 0; dan saya peralihan 8.
Jika anda telah berjaya dilaksanakan anda Caesar cipher, ia akan menjadi baik
rangka kerja yang anda boleh melaksanakan Vigenere.
Seperti yang anda lihat, berlari Vigenere a cipher dengan watak tunggal sebagai
kata kunci adalah perkara yang sama sebagai cipher Caesar.
>> Langkah yang sama memohon kepada Vigenere seperti yang mereka lakukan di Caesar.
Kata kunci adalah baris arahan kedua hujah, jadi anda mengakses dengan argv1.
Kemudian, anda perlu mengesahkan bahawa kunci perkataan adalah sesungguhnya semua abjad.
Berikut adalah di mana alpha boleh datang dalam berguna.
Jika anda mempunyai kata kunci yang sah, anda akan mendapat kekuatan dari pengguna, dan kemudian
anda sudah bersedia untuk menulis dlm kod.
>> The Vigenere formula cipher adalah sama untuk Caesar formula, kecuali kini k
menjadi k subskrip j, menunjukkan huruf j-ke-kata kunci.
Mari kita melangkah melalui proses ini.
Katakanlah anda mahu menghantar mesej kepada anda kemalangan, saya suka anda, tetapi anda tidak
mahu semua orang tahu.
Jadi anda menggunakan cipher Vigenere dengan panda kata kunci, kerana, dengan baik, anda juga
suka panda.
>> Surat pertama, saya akan beralih oleh p, memberi x, 15 huruf selepas saya,
kerana 15 p adalah 16 huruf abjad.
Surat seterusnya dalam teks biasa adalah ruang, supaya tidak akan beralih.
Dan indeks kata kunci tidak akan berubah.
>> Kemudian huruf seterusnya dalam teks biasa adalah l, beralih oleh, yang tidak beralih
surat teks kosong sama sekali, kerana adalah surat 0 abjad.
Proses ini berterusan, memajukan watak kata kunci setiap kali ada
surat dalam teks biasa.
Apabila huruf terakhir kata kunci adalah dicapai, kata kunci membalut sekitar dan
perubahan ke dataran seterusnya surat teks dengan p.
X lvne noh.
Bagaimana romantis.
>> Jadi diberikan watak, bagaimana anda menukar itu ke dalam yang sama
Cipher peralihan?
Cuba membandingkan ASCII nilai kepada peralihan.
Mungkin anda boleh mencari hubungan antara huruf dan mereka
indeks abjad matematik menggunakan ASCII.
Bolehkah anda menambah atau menolak satu watak daripada yang lain untuk mendapatkan
anda hasil yang dikehendaki?
>> Ingat bahawa perubahan untuk huruf besar dan huruf kecil yang sama.
Jadi mungkin anda perlu mengenal pasti dua formula yang sama untuk mewakili
peralihan, satu untuk huruf besar watak kata kunci, dan satu
untuk satu yang kecil.
>> Seterusnya, ingat bahawa kemajuan kata kunci hanya jika watak dalam
teks biasa adalah surat dan kes biasa
teks mesti dipelihara.
Jadi, jika kita melihat formula bagi Anjakan Vigenere, terdapat dua indeks
pembolehubah, i dan j.
Satu menjejaki kedudukan di dataran teks, dan lain-lain jawatan
dalam kata kunci.
Tetapi teks anda mungkin lebih lama daripada kata kunci anda, di mana anda
indeks kata kunci yang perlu untuk membalut di sekitar belakang untuk permulaan kata kunci.
>> Bagaimana anda melakukan ini?
Mari kita lihat kembali pada operator modulo.
Modulo ditakrifkan adalah bakinya membahagikan dua nombor.
Tetapi apa yang praktikal sebenar menggunakan modulo?
>> Nah, katakan anda mempunyai kumpulan besar orang, dan anda perlu untuk membahagikan ke
tiga kumpulan.
Salah satu cara untuk membahagikan orang-orang ke dalam kumpulan adalah untuk mereka mengira off.
Anda nombor kumpulan kumpulan-kumpulan yang nombor 1, 2, dan 3.
Orang pertama yang akan berkata 1, 2 seterusnya, 3 seterusnya.
Orang yang selepas itu akan berkata 1, kerana tidak ada satu kumpulan 4, dan
kiraan bermula lebih dari sana.
>> Anda boleh menggunakan modulo untuk melakukan perkara yang sama.
Kali ini, kumpulan-kumpulan akan menjadi kumpulan 0, 1, dan 2.
Orang yang pertama, nombor 1 modulo 3, 1.
Orang 2 modulo 3 ialah 2.
Orang 3 modulo 3 adalah 0.
Orang modulo 4 3 memberikan 1, dan sebagainya kumpulan boleh membalut di sekitar.
>> Jadi, jika anda mengambil indeks dan modulo indeks yang oleh saiz maksimum,
hasil tidak akan lebih besar daripada atau sama dengan saiz, yang bermaksud bahawa anda
boleh meningkatkan indeks sebagai banyak yang anda suka.
Dan selagi anda modulo indeks oleh bilangan tertentu, anda tidak akan mendapatkan nombor
yang lebih besar daripada itu.
Oleh itu, kita mempunyai 10 orang bukan 5, dan mereka semua akan mendapat yang diberikan kepada kumpulan-kumpulan
bilangan 0, 1, atau 2.
>> Cuba untuk memohon ini untuk membungkus seluruh kata kunci, kecuali bukannya menyusun
orang ke nombor kumpulan yang anda mahu indeks kata kunci supaya anda boleh
mendapatkan watak yang betul untuk beralih tanpa melebihi
panjang tali.
Dengan itu, anda perlu anda Vigenere cipher.
Nama saya Zamyla, dan ini adalah CS50.