1 00:00:00,000 --> 00:00:10,101 >> [MUSIC PLAYING] 2 00:00:10,101 --> 00:00:12,700 >> ZAMYLA CHAN: Mari kita menerapkan Vigenere, sedikit lebih 3 00:00:12,700 --> 00:00:14,710 mengamankan cipher dari Caesar. 4 00:00:14,710 --> 00:00:19,670 Teks biasa dienkripsi dengan menggunakan string bukan integer. 5 00:00:19,670 --> 00:00:22,970 Setiap karakter abjad di teks biasa digeser oleh 6 00:00:22,970 --> 00:00:24,450 huruf dalam kata kunci. 7 00:00:24,450 --> 00:00:30,860 >> Dalam contoh ini, kata kunci ohai, O sesuai dengan pergeseran 14; H ke 8 00:00:30,860 --> 00:00:36,910 bergeser dari 7; A, pergeseran 0, dan saya pergeseran 8. 9 00:00:36,910 --> 00:00:40,710 Jika Anda telah berhasil dilaksanakan Anda Caesar cipher, itu akan menjadi bagus 10 00:00:40,710 --> 00:00:43,510 kerangka dari mana Anda dapat mengimplementasikan Vigenere. 11 00:00:43,510 --> 00:00:47,140 Seperti yang Anda lihat, menjalankan sebuah Vigenere cipher dengan karakter tunggal sebagai 12 00:00:47,140 --> 00:00:51,830 kata kunci adalah hal yang sama sebagai cipher Caesar. 13 00:00:51,830 --> 00:00:55,170 >> Langkah yang sama berlaku untuk Vigenere seperti yang mereka lakukan di Caesar. 14 00:00:55,170 --> 00:01:01,240 Kata kunci adalah baris perintah kedua argumen, sehingga Anda mengaksesnya dengan argv1. 15 00:01:01,240 --> 00:01:05,400 Kemudian Anda perlu untuk memverifikasi bahwa kunci Kata memang semua abjad. 16 00:01:05,400 --> 00:01:09,040 Di sinilah adalah alpha dapat berguna. 17 00:01:09,040 --> 00:01:13,550 Jika Anda memiliki kata kunci yang valid, Anda mendapatkan kekuatan dari pengguna, dan kemudian 18 00:01:13,550 --> 00:01:15,820 Anda siap untuk menulis dlm kode. 19 00:01:15,820 --> 00:01:20,840 >> The Vigenere cipher Rumus mirip kepada Kaisar rumus, kecuali sekarang k 20 00:01:20,840 --> 00:01:27,650 menjadi k subscript j, menunjukkan surat j kata kunci. 21 00:01:27,650 --> 00:01:29,640 Mari kita langkah melalui proses ini. 22 00:01:29,640 --> 00:01:34,060 Katakanlah Anda ingin mengirim pesan ke Anda kecelakaan, aku menyukaimu, tapi Anda tidak 23 00:01:34,060 --> 00:01:35,190 ingin semua orang tahu. 24 00:01:35,190 --> 00:01:39,800 Jadi Anda menggunakan cipher Vigenere dengan kata kunci panda, karena, well, Anda juga 25 00:01:39,800 --> 00:01:41,160 seperti panda. 26 00:01:41,160 --> 00:01:47,140 >> Surat pertama, saya, akan bergeser oleh p, memberikan x, 15 huruf setelah saya, 27 00:01:47,140 --> 00:01:52,850 karena 15 p adalah tanggal 16 huruf alfabet. 28 00:01:52,850 --> 00:01:56,750 Huruf berikutnya dalam teks biasa spasi, sehingga tidak akan bergeser. 29 00:01:56,750 --> 00:02:00,420 Dan indeks kata kunci tidak akan berubah. 30 00:02:00,420 --> 00:02:05,440 >> Kemudian huruf berikutnya dalam teks biasa adalah l, digeser oleh, yang tidak bergeser 31 00:02:05,440 --> 00:02:10,930 surat teks biasa sama sekali, karena adalah huruf ke-0 dari alfabet. 32 00:02:10,930 --> 00:02:14,980 Proses berlanjut, memajukan karakter kata kunci setiap kali ada 33 00:02:14,980 --> 00:02:16,840 huruf dalam teks biasa. 34 00:02:16,840 --> 00:02:21,850 Setelah huruf terakhir pada kata kunci adalah tercapai, kata kunci membungkus di sekitar dan 35 00:02:21,850 --> 00:02:25,890 bergeser ke dataran berikutnya Surat teks dengan p. 36 00:02:25,890 --> 00:02:27,170 X lvne noh. 37 00:02:27,170 --> 00:02:29,180 Bagaimana romantis. 38 00:02:29,180 --> 00:02:33,120 >> Jadi mengingat karakter, bagaimana Anda mengkonversi yang ke yang sesuai 39 00:02:33,120 --> 00:02:34,590 cipher pergeseran? 40 00:02:34,590 --> 00:02:37,870 Cobalah membandingkan ASCII nilai ke shift. 41 00:02:37,870 --> 00:02:41,530 Mungkin Anda dapat menemukan hubungan antara huruf dan mereka 42 00:02:41,530 --> 00:02:44,550 indeks alfabet menggunakan matematika ASCII. 43 00:02:44,550 --> 00:02:48,850 Dapatkah Anda menambah atau mengurangi satu karakter dari yang lain untuk mendapatkan 44 00:02:48,850 --> 00:02:51,630 hasil yang diinginkan? 45 00:02:51,630 --> 00:02:55,480 >> Ingat bahwa pergeseran untuk huruf besar dan huruf kecil adalah sama. 46 00:02:55,480 --> 00:02:59,510 Jadi mungkin Anda harus mengidentifikasi dua rumus yang sama untuk mewakili 47 00:02:59,510 --> 00:03:03,570 shift, satu untuk huruf besar karakter kata kunci, dan satu 48 00:03:03,570 --> 00:03:06,510 untuk satu huruf kecil. 49 00:03:06,510 --> 00:03:10,630 >> Selanjutnya, ingat bahwa kemajuan kata kunci hanya jika karakter dalam 50 00:03:10,630 --> 00:03:13,520 teks biasa adalah surat dan kasus dataran 51 00:03:13,520 --> 00:03:16,020 teks harus dilestarikan. 52 00:03:16,020 --> 00:03:20,280 Jadi jika kita melihat rumus untuk Pergeseran Vigenere, ada dua indeks 53 00:03:20,280 --> 00:03:22,880 variabel, i dan j. 54 00:03:22,880 --> 00:03:26,795 Salah melacak posisi di dataran teks, dan lain posisi 55 00:03:26,795 --> 00:03:27,910 dalam kata kunci. 56 00:03:27,910 --> 00:03:32,960 Tapi teks biasa Anda mungkin lebih lama dari kata kunci Anda, dalam hal ini Anda 57 00:03:32,960 --> 00:03:38,290 Indeks kata kunci perlu membungkus kembali ke awal kata kunci. 58 00:03:38,290 --> 00:03:39,870 >> Bagaimana Anda melakukan ini? 59 00:03:39,870 --> 00:03:43,740 Mari kita melihat kembali pada Operator modulo. 60 00:03:43,740 --> 00:03:47,280 Modulo didefinisikan adalah sisanya membagi dua nomor. 61 00:03:47,280 --> 00:03:50,680 Tapi apa yang sebenarnya praktis penggunaan modulo? 62 00:03:50,680 --> 00:03:54,340 >> Nah, katakanlah Anda memiliki kelompok besar orang, dan Anda perlu untuk membagi menjadi 63 00:03:54,340 --> 00:03:55,100 tiga kelompok. 64 00:03:55,100 --> 00:03:59,500 Salah satu cara untuk membagi orang ke dalam kelompok adalah memiliki mereka menghitung off. 65 00:03:59,500 --> 00:04:03,520 Anda nomor kelompok kelompok nomor 1, 2, dan 3. 66 00:04:03,520 --> 00:04:08,510 Orang pertama akan mengatakan 1, 2 berikutnya, 3 berikutnya. 67 00:04:08,510 --> 00:04:12,860 Orang setelah itu akan mengatakan 1, karena tidak ada kelompok 4, dan 68 00:04:12,860 --> 00:04:15,880 count mulai alih dari sana. 69 00:04:15,880 --> 00:04:18,209 >> Anda dapat menggunakan Modulo untuk melakukan hal yang sama. 70 00:04:18,209 --> 00:04:22,680 Kali ini, kelompok akan menjadi kelompok 0, 1, dan 2. 71 00:04:22,680 --> 00:04:26,960 Orang pertama, nomor 1 modulo 3, 1. 72 00:04:26,960 --> 00:04:29,830 Orang 2 modulo 3 adalah 2. 73 00:04:29,830 --> 00:04:32,460 Orang 3 modulo 3 adalah 0. 74 00:04:32,460 --> 00:04:38,470 Orang 4 modulo 3 memberikan 1, dan sebagainya kelompok dapat membungkus. 75 00:04:38,470 --> 00:04:44,700 >> Jadi, jika Anda mengambil indeks dan modulo bahwa indeks oleh ukuran maksimum, 76 00:04:44,700 --> 00:04:49,820 Hasilnya tidak akan pernah lebih besar dari atau sama dengan ukuran, yang berarti bahwa Anda 77 00:04:49,820 --> 00:04:52,330 dapat meningkatkan indeks sebagai sebanyak yang Anda inginkan. 78 00:04:52,330 --> 00:04:57,400 Dan selama Anda modulo indeks dengan beberapa nomor, Anda tidak akan mendapatkan nomor 79 00:04:57,400 --> 00:04:58,510 lebih besar dari itu. 80 00:04:58,510 --> 00:05:04,500 Jadi kita memiliki 10 orang, bukan 5, dan mereka semua akan bisa ditugaskan untuk kelompok 81 00:05:04,500 --> 00:05:07,480 angka 0, 1, atau 2. 82 00:05:07,480 --> 00:05:11,680 >> Cobalah untuk menerapkan ini untuk membungkus atas kata kunci, kecuali bukan pemilahan 83 00:05:11,680 --> 00:05:16,050 orang ke nomor kelompok Anda ingin indeks kata kunci sehingga Anda dapat 84 00:05:16,050 --> 00:05:19,080 mendapatkan karakter yang tepat untuk bergeser tanpa melebihi 85 00:05:19,080 --> 00:05:21,836 panjang string. 86 00:05:21,836 --> 00:05:24,790 Dengan itu, Anda memiliki Anda Vigenere cipher. 87 00:05:24,790 --> 00:05:27,790 Nama saya Zamyla, dan ini adalah CS50. 88 00:05:27,790 --> 00:05:32,566