1 00:00:00,000 --> 00:00:00,930 2 00:00:00,930 --> 00:00:04,030 >> Zamyla Чан: Давайте активізувати наші гра з Vigenere шифру. 3 00:00:04,030 --> 00:00:06,710 Vigenere шифр дуже схожий на Цезаря, 4 00:00:06,710 --> 00:00:11,060 крім Цезаря ми пройшли в одне ціле, як наш ключ. 5 00:00:11,060 --> 00:00:14,100 У Vigenere ми збираємося передати в якості ключового слова. 6 00:00:14,100 --> 00:00:19,400 Так що, якщо б я хотів, щоб зрушити шифротекста це CS 50 від ohai, 7 00:00:19,400 --> 00:00:23,260 то це означає, що кожна буква в ohai служитиме в якості ключа, 8 00:00:23,260 --> 00:00:27,160 і я збираюся циклу над що ключове слово для мого зсуву 9 00:00:27,160 --> 00:00:31,930 що робить зашифрованого набагато важче розшифрувати. 10 00:00:31,930 --> 00:00:34,540 >> Що це означає зрушення за ключовим словом? 11 00:00:34,540 --> 00:00:38,610 Ну, ключове слово є рядком де кожна буква відповідає 12 00:00:38,610 --> 00:00:41,080 до деякого цілого зсуву. 13 00:00:41,080 --> 00:00:49,310 Таким чином, O відповідає ключу 14, ч до ключу 7, має ключ від 0, 14 00:00:49,310 --> 00:00:54,670 так що нічого не змінило б, а потім я є ключ 8. 15 00:00:54,670 --> 00:01:00,000 >> Скажімо, я побіг Vigenere А з простий текст це добре CS50, 16 00:01:00,000 --> 00:01:02,800 що б просто дати мені незмінну рядок. 17 00:01:02,800 --> 00:01:08,170 Зверніть увагу на те, що це еквівалентно Цезар працює з ключем, рівним нулю. 18 00:01:08,170 --> 00:01:12,070 Насправді, біг Vigenere з будь-яким одиночним символом 19 00:01:12,070 --> 00:01:17,070 буде еквівалентно запуску Цезар з тим же числом. 20 00:01:17,070 --> 00:01:20,400 >> Добре, так, так як вони настільки схожі, я б 21 00:01:20,400 --> 00:01:24,300 насправді рекомендую, якщо вам хочете, ви можете просто скопіювати Цезар 22 00:01:24,300 --> 00:01:26,932 код в код Vigenere. 23 00:01:26,932 --> 00:01:28,640 Все буде змінюватися, але принаймні у вас є 24 00:01:28,640 --> 00:01:31,110 деякі хребет, що ви можете працювати з. 25 00:01:31,110 --> 00:01:36,410 Оскільки TODOS такі ж ми хочемо щоб отримати ключ, отримати простий текст, 26 00:01:36,410 --> 00:01:40,690 зашифровувати, що звичайний текст, а потім роздрукувати це. 27 00:01:40,690 --> 00:01:44,980 >> Так само, як Цезар ключ збирається бути прийнятий в якості другої командного рядка 28 00:01:44,980 --> 00:01:50,540 аргумент, що міститься в індексі ARGV 1, але це по-іншому на цей раз 29 00:01:50,540 --> 00:01:52,560 тому що вона повинна бути в алфавітному порядку. 30 00:01:52,560 --> 00:01:56,390 Таким чином, ми повинні перебрати кожен один символ в цьому ключі 31 00:01:56,390 --> 00:02:00,800 що користувач пройшов в, а також забезпечити що кожен символ є літерою 32 00:02:00,800 --> 00:02:02,800 для того, щоб продовжити. 33 00:02:02,800 --> 00:02:05,560 >> Після того, як ми зробили це, то ми може отримати рядок від користувача, 34 00:02:05,560 --> 00:02:07,560 так само, як ми робили раніше. 35 00:02:07,560 --> 00:02:10,520 І тепер, ми приходимо до серця проблеми для Vigenere, 36 00:02:10,520 --> 00:02:14,665 який так само, як Цезар, то як до з'ясувати картину шифруванні 37 00:02:14,665 --> 00:02:19,760 і рівняння, і зашифровувати весь відкритий текст. 38 00:02:19,760 --> 00:02:23,280 >> Таким чином, ви помітите, що Рівняння для Vigenere зсуву 39 00:02:23,280 --> 00:02:25,610 дуже схожий на Цезаря один. 40 00:02:25,610 --> 00:02:29,780 Єдина відмінність полягає в тому, що замість однієї змінної до 41 00:02:29,780 --> 00:02:37,270 раніше, тепер до має індекс, із зазначенням -ю букву ключа. 42 00:02:37,270 --> 00:02:39,560 >> Давайте розберемо приклад. 43 00:02:39,560 --> 00:02:43,830 Припустимо, ви хотіли передати секрет повідомлення на ваш тиснява, що ти мені подобаєшся. 44 00:02:43,830 --> 00:02:46,325 Ну, для вашого ключа, який ви вибрати щось, що ваш 45 00:02:46,325 --> 00:02:49,790 знаю, тиснява знає, що вам подобається, панд. 46 00:02:49,790 --> 00:02:52,290 Добре, так як ми зрушимо це? 47 00:02:52,290 --> 00:02:55,500 >> Ну, у нас є наш індекс відкритого тексту. 48 00:02:55,500 --> 00:02:59,160 Ось в першому листі і так це індекс для нашого ключа 49 00:02:59,160 --> 00:03:02,830 яка знаходиться на р, перший буква в нашому панди слові. 50 00:03:02,830 --> 00:03:08,590 Таким чином, зміщення I р дає нам х, Потім ми просуваємося відкритого тексту індекс. 51 00:03:08,590 --> 00:03:10,460 Це змушує нас простір. 52 00:03:10,460 --> 00:03:13,540 Тепер, символ пробілу не є алфавітним, 53 00:03:13,540 --> 00:03:16,930 так що це означає, що, що як раз передає прямо до шифротекста, 54 00:03:16,930 --> 00:03:23,430 ми поміщаємо простір там, і ми не робимо просувати індекс для нашого ключа. 55 00:03:23,430 --> 00:03:25,820 Таким чином, ми все ще на р в цій точці. 56 00:03:25,820 --> 00:03:30,130 >> Ми перейти до наступного Індекс в нашому відкритого тексту. 57 00:03:30,130 --> 00:03:34,030 А тепер, тому що це буква, нижній регістр л, 58 00:03:34,030 --> 00:03:37,920 ми переходимо що до Наступний індекс в нашому ключі. 59 00:03:37,920 --> 00:03:42,360 Який є, який є нульовим зрушення, так що просто стає 60 00:03:42,360 --> 00:03:44,370 л в нашому шифротекста. 61 00:03:44,370 --> 00:03:51,120 Потім ми просуваємося як відкритий текст, і ключ індексу, тому що це буквений. 62 00:03:51,120 --> 00:03:56,210 Отже, ми продовжуємо, що поки ми не отримаємо на електронну адресу в подібному. 63 00:03:56,210 --> 00:04:01,090 >> Добре, так що ви побачите в цьому вказують, що, з точки зору нашого ключового індексу, 64 00:04:01,090 --> 00:04:03,940 ми досягли кінця панда слово, так, що 65 00:04:03,940 --> 00:04:08,750 відбувається, коли ми перейдемо до наступного алфавітний буква в незашифрованому вигляді? 66 00:04:08,750 --> 00:04:12,180 Ну, все, що відбувається, ми обернути навколо початку, 67 00:04:12,180 --> 00:04:14,710 до першого індексу нашого ключа. 68 00:04:14,710 --> 00:04:19,570 Так, тоді ми переміщаємо, що у р, щоб дати нам п. 69 00:04:19,570 --> 00:04:26,860 І потім, ми продовжуємо оздоблювальні кодування наш відкритий текст, щоб отримати х lvne NOH. 70 00:04:26,860 --> 00:04:29,300 >> З цього прикладу, я показали, що ми тільки заздалегідь 71 00:04:29,300 --> 00:04:33,140 до наступної букви в ключових словах якщо символ у вигляді звичайного тексту 72 00:04:33,140 --> 00:04:37,480 цей лист так що IsAlpha функція стане в нагоді тут. 73 00:04:37,480 --> 00:04:43,030 І, так само, як в Цезарь, ми хочемо зберегти справи, ISUPPER і ISLOWER. 74 00:04:43,030 --> 00:04:46,100 Так, додайте трохи в в ваш псевдокоді. 75 00:04:46,100 --> 00:04:48,510 >> Так як же нам з'ясувати ключові зрушення? 76 00:04:48,510 --> 00:04:53,030 Ну, якщо ви пам'ятаєте нашу дискусію на буквених індексів в Цезарі 77 00:04:53,030 --> 00:04:55,370 проблема, це дуже схоже. 78 00:04:55,370 --> 00:05:01,130 >> Де A відповідає ASCII значення 65, але зміщення 0, 79 00:05:01,130 --> 00:05:03,550 а потім остання буква в алфавіті, Z, 80 00:05:03,550 --> 00:05:06,940 відповідає зрушенню 25. 81 00:05:06,940 --> 00:05:10,320 Ви помітите, що зрушення ідентична чи ні 82 00:05:10,320 --> 00:05:14,880 буква в верхньому регістрі або нижньому регістрі. 83 00:05:14,880 --> 00:05:17,700 >> ОК, так що тепер, коли ви знають, як з'ясувати, 84 00:05:17,700 --> 00:05:21,470 чисельний зрушення, відповідає одному символу 85 00:05:21,470 --> 00:05:24,050 давайте повернемося до нашого рівняння. 86 00:05:24,050 --> 00:05:28,180 Тому що ми маємо два різних індекси тут, я і J, 87 00:05:28,180 --> 00:05:32,130 це натяк, що ми хочемо, щоб стежити і нашу позицію в незашифрованому 88 00:05:32,130 --> 00:05:36,600 а також нашої позиції в ключових словах, так що ті дві окремі змінні 89 00:05:36,600 --> 00:05:39,010 що ми хочемо зберегти володіння. 90 00:05:39,010 --> 00:05:42,580 >> Тепер становище в нашому незашифрованому буде збільшуватися кожного разу, 91 00:05:42,580 --> 00:05:45,530 так що це буде трохи пряміше вперед 92 00:05:45,530 --> 00:05:49,750 на відміну від позиції ключових слів, який ми знаємо, є обернути навколо, 93 00:05:49,750 --> 00:05:52,910 а іноді і збільшення, іноді залишаються тими ж. 94 00:05:52,910 --> 00:05:55,430 Отже, як же ми реалізуємо функціональність 95 00:05:55,430 --> 00:05:59,820 щоб обернути навколо Індекс для ключового слова? 96 00:05:59,820 --> 00:06:01,640 >> Я збираюся використовувати відрахувати приклад. 97 00:06:01,640 --> 00:06:06,100 Відраховуючи є популярним способом щоб розділити людей на групи. 98 00:06:06,100 --> 00:06:10,660 Скажімо, у мене було 5 чоловік, і я хотів розділити їх на три групи, 99 00:06:10,660 --> 00:06:13,640 ну тоді я хотів би почати з загинати. 100 00:06:13,640 --> 00:06:16,980 Перша людина буде сказати, що я команда номер один, 101 00:06:16,980 --> 00:06:21,030 наступна людина буде номер команди два, третя особа номер команди 102 00:06:21,030 --> 00:06:21,910 три. 103 00:06:21,910 --> 00:06:25,910 Тепер, я хочу тільки три групи так, четверта людина буде насправді 104 00:06:25,910 --> 00:06:30,160 почати з самого початку, і кажуть, ну, я команда номер один, а також, 105 00:06:30,160 --> 00:06:32,890 і наступна людина буде команда номер два. 106 00:06:32,890 --> 00:06:37,660 І звідти, вони можуть поділяються на свої групи. 107 00:06:37,660 --> 00:06:41,130 >> Отже, як я міг би використовувати по модулю щоб допомогти мені реалізувати 108 00:06:41,130 --> 00:06:44,160 це відрахувати обтікати функції? 109 00:06:44,160 --> 00:06:50,140 Ну, перша людина, номер 1, по модулю 3 дає нам 1. 110 00:06:50,140 --> 00:06:54,690 2 мод 3 дає нам 2, і 3 по модулю 3 дає нам 0. 111 00:06:54,690 --> 00:07:02,140 >> Четверта людина, номер 4, мод 3 дає нам 1, а потім 5 мод 3 дає нам 2. 112 00:07:02,140 --> 00:07:05,370 Таким чином, можна помітити, що незважаючи на те, число людей, що у мене є 113 00:07:05,370 --> 00:07:11,210 збільшується, і вище 3, так як я моддинга на 3 114 00:07:11,210 --> 00:07:15,250 Я завжди отримую числа 0, 1 і 2. 115 00:07:15,250 --> 00:07:19,040 Я ніколи не отримую більше, ніж 3. 116 00:07:19,040 --> 00:07:22,630 Отже, навіть якщо у мене було 10 люди, то все з тих людей, 117 00:07:22,630 --> 00:07:27,430 буде як і раніше перебувати в групах 1, 2 або 0. 118 00:07:27,430 --> 00:07:33,560 >> Отже, тепер ми знаємо, що якщо ми маємо групу 5 і ми мод все ті, на 3, 119 00:07:33,560 --> 00:07:38,180 то ми ніколи не будемо перевищувати групи 0, 1 або 2. 120 00:07:38,180 --> 00:07:43,430 Таким чином, ми ніколи не збираємося, щоб отримати групу число, це дорівнює 3 або вище. 121 00:07:43,430 --> 00:07:46,980 Таким чином, навіть якщо я додам ще п'ять люди, то все з них 122 00:07:46,980 --> 00:07:53,150 буде як і раніше бути призначені групам 0, 1 або 2, тому що я моддинга на 3. 123 00:07:53,150 --> 00:07:56,510 Я ніколи не буде перевищувати цю кришку. 124 00:07:56,510 --> 00:08:00,800 >> ОК, так що давайте подивимося, якщо ми можемо застосувати це поняття використання по модулю 125 00:08:00,800 --> 00:08:03,710 щоб обернути навколо номера груп і застосувати 126 00:08:03,710 --> 00:08:08,000 це Vigenere, де ми хочемо використовувати по модулю, щоб обернути навколо 127 00:08:08,000 --> 00:08:10,220 індекс за ключовим словом. 128 00:08:10,220 --> 00:08:12,830 Незважаючи на те, що ми збільшенням індекс ми завжди 129 00:08:12,830 --> 00:08:17,260 хочете, щоб переконатися, що ми завжди обтікати до самого початку 130 00:08:17,260 --> 00:08:20,050 ніколи не перевищуючи довжина рядка. 131 00:08:20,050 --> 00:08:23,510 >> ОК, так що я знаю, що це може бути трохи переважною. 132 00:08:23,510 --> 00:08:26,670 Там дуже багато більше, щоб зробити в цьому р наборі. 133 00:08:26,670 --> 00:08:30,050 Отже, переконайтеся, що ви пишете з хороший псевдокод для себе 134 00:08:30,050 --> 00:08:32,870 що ви розумієте і що виконує свою роботу. 135 00:08:32,870 --> 00:08:35,580 Спробуйте звернутися кожен одиночна лінія незалежно один від одного 136 00:08:35,580 --> 00:08:38,370 з'ясувати всі мало невеликі шматочки головоломки 137 00:08:38,370 --> 00:08:40,260 перш ніж покласти його разом. 138 00:08:40,260 --> 00:08:43,110 >> Переконайтеся, що ви можете отримати ключ з командного рядка 139 00:08:43,110 --> 00:08:46,780 і переконайтеся, що це алфавітний, отримати простий текст від користувача, 140 00:08:46,780 --> 00:08:51,010 а потім в шифруванні, переконайтеся, що ви знають, як зашифрувати одну букву, 141 00:08:51,010 --> 00:08:56,130 а потім переходите на всю рядок з усіма обернути навколо функцій. 142 00:08:56,130 --> 00:08:59,610 І, нарешті, ви можете роздрукувати шифротекста. 143 00:08:59,610 --> 00:09:04,050 >> Мене звуть це Zamyla, і це було Vigenere. 144 00:09:04,050 --> 00:09:07,757