>> Zamyla Чан: Давайте активизировать наши игра с Vigenere шифра.
Vigenere шифр очень похож на Цезаря,
кроме Цезаря мы прошли в одно целое, как наш ключ.
В Vigenere мы собираемся передать в качестве ключевого слова.
Так что, если бы я хотел, чтобы сдвинуть шифротекста это CS 50 от ohai,
то это означает, что каждая буква в ohai будет служить в качестве ключа,
и я собираюсь цикла над что ключевое слово для моего сдвига
что делает зашифрованного гораздо труднее расшифровать.
>> Что это значит сдвиг по ключевому слову?
Ну, ключевое слово является строкой где каждая буква соответствует
до некоторого целого сдвига.
Таким образом, O соответствует ключу 14, ч к ключу 7, имеет ключ от 0,
так что ничего не изменило бы, а затем я есть ключ 8.
>> Скажем, я побежал Vigenere А с простой текст это хорошо CS50,
что бы просто дать мне неизменную строку.
Обратите внимание на то, что это эквивалентно Цезарь работает с ключом, равным нулю.
На самом деле, бег Vigenere с любым одиночным символом
будет эквивалентно запуску Цезарь с тем же числом.
>> Хорошо, так, так как они настолько похожи, я бы
на самом деле рекомендую, если вам хотите, вы можете просто скопировать Цезарь
код в код Vigenere.
Все изменится, но по крайней мере у вас есть
некоторые позвоночник, что вы можете работать с.
Поскольку TODOS такие же мы хотим чтобы получить ключ, получить простой текст,
зашифровывать, что обычный текст, а затем распечатать это.
>> Так же, как Цезарь ключ собирается быть принят в качестве второй командной строки
аргумент, содержащийся в индексе ARGV 1, но это по-другому на этот раз
потому что она должна быть в алфавитном порядке.
Таким образом, мы должны перебрать каждый один символ в этом ключе
что пользователь прошел в, а также обеспечить что каждый символ буквенный
для того, чтобы продолжить.
>> После того, как мы сделали это, то мы может получить строку от пользователя,
так же, как мы делали раньше.
И теперь, мы приходим к сердцу проблемы для Vigenere,
который так же, как Цезарь, то как к выяснить картину шифровании
и уравнение, и зашифровывать весь открытый текст.
>> Таким образом, вы заметите, что Уравнение для Vigenere сдвига
очень похож на Цезаря один.
Единственное отличие состоит в том, что вместо одной переменной к
раньше, теперь к имеет индекс, с указанием -ю букву ключа.
>> Давайте разберем пример.
Допустим, вы хотели передать секрет сообщение на ваш давка, что ты мне нравишься.
Ну, для вашего ключа, который вы выбрать что-то, что ваш
знаю, давка знает, что вам нравится, панд.
Хорошо, так как мы сдвинем это?
>> Ну, у нас есть наш индекс открытого текста.
Вот в первом письме и так это индекс для нашего ключа
которая находится на р, первый буква в нашем панды слове.
Таким образом, смещение I р дает нам х, Затем мы продвигаемся открытого текста индекс.
Это заставляет нас пространство.
Теперь, символ пробела не является алфавитным,
так что это означает, что, что как раз передает прямо к шифротекста,
мы помещаем пространство там, и мы не делаем продвигать индекс для нашего ключа.
Таким образом, мы все еще на р в этой точке.
>> Мы перейти к следующему Индекс в нашем открытого текста.
А теперь, потому что это буква, нижний регистр л,
мы переходим что к Следующий индекс в нашем ключе.
Который является, который является нулевым сдвиг, так что просто становится
л в нашем шифротекста.
Затем мы продвигаемся как открытый текст, и ключ индекса, потому что это буквенный.
Итак, мы продолжаем, что пока мы не получим на электронный адрес в подобном.
>> Хорошо, так что вы увидите в этом указывают, что, с точки зрения нашего ключевого индекса,
мы достигли конца панда слово, так, что
происходит, когда мы перейдем к следующему алфавитный буква в незашифрованном виде?
Ну, все, что происходит, мы обернуть вокруг начала,
к первому индексу нашего ключа.
Так, тогда мы перемещаем, что у р, чтобы дать нам п.
И потом, мы продолжаем отделочные кодирование наш открытый текст, чтобы получить х lvne NOH.
>> Из этого примера, я показали, что мы только заранее
к следующей букве в ключевых словах если символ в виде обычного текста
это письмо так что IsAlpha функция пригодится здесь.
И, так же, как в Цезарь, мы хотим сохранить дела, ISUPPER и ISLOWER.
Так, добавьте немного в в ваш псевдокоде.
>> Так как же нам выяснить ключевые сдвиги?
Ну, если вы помните нашу дискуссию на буквенных индексов в Цезаре
проблема, это очень похоже.
>> Где A соответствует ASCII значение 65, но смещение 0,
а затем последняя буква в алфавите, Z,
соответствует сдвигу 25.
Вы заметите, что сдвиг идентична или нет
буква в верхнем регистре или нижнем регистре.
>> ОК, так что теперь, когда вы знают, как выяснить,
численный сдвиг, соответствует одному символу
давайте вернемся к нашему уравнению.
Потому что мы имеем два различных индексы здесь, я и J,
это намек, что мы хотим, чтобы следить и нашей позиции в незашифрованном
а также нашей позиции в ключевых словах, так что те две отдельные переменные
что мы хотим сохранить владение.
>> Теперь положение в нашем незашифрованном будет увеличиваться каждый раз,
так что это будет немного более прямо вперед
в отличие от позиции ключевых слов, который мы знаем, есть обернуть вокруг,
а иногда и приращение, иногда остаются теми же.
Итак, как же мы реализуем функциональность
чтобы обернуть вокруг Индекс для ключевого слова?
>> Я собираюсь использовать отсчитать пример.
Отсчитывая является популярным способом чтобы разделить людей на группы.
Скажем, у меня было 5 человек, и я хотел разделить их на три группы,
ну тогда я хотел бы начать с загибать.
Первый человек будет сказать, что я команда номер один,
следующий человек будет номер команды два, третье лицо номер команды
три.
Теперь, я хочу только три группы так, четвертый человек будет на самом деле
начать с самого начала, и говорят, ну, я команда номер один, а также,
и следующий человек будет команда номер два.
И оттуда, они могут разделяются на свои группы.
>> Итак, как я мог бы использовать по модулю чтобы помочь мне реализовать
это отсчитать обтекать функции?
Ну, первый человек, номер 1, по модулю 3 дает нам 1.
2 мод 3 дает нам 2, и 3 по модулю 3 дает нам 0.
>> Четвертый человек, номер 4, мод 3 дает нам 1, а затем 5 мод 3 дает нам 2.
Таким образом, можно заметить, что несмотря на то, число людей, что у меня есть
увеличивается, и выше 3, так как я моддинга на 3
Я всегда получаю числа 0, 1 и 2.
Я никогда не получаю больше, чем 3.
Итак, даже если у меня было 10 люди, то все из тех людей,
будет по-прежнему находиться в группах 1, 2 или 0.
>> Итак, теперь мы знаем, что если мы имеем группу 5 и мы мод все те, на 3,
то мы никогда не будем превышать группы 0, 1 или 2.
Таким образом, мы никогда не собираемся, чтобы получить группу число, это равно 3 или выше.
Таким образом, даже если я добавлю еще пять люди, то все из них
будет по-прежнему быть назначены группам 0, 1 или 2, потому что я моддинга на 3.
Я никогда не будет превышать эту крышку.
>> ОК, так что давайте посмотрим, если мы можем применить это понятие использования по модулю
чтобы обернуть вокруг номера групп и применить
это Vigenere, где мы хотим использовать по модулю, чтобы обернуть вокруг
индекс по ключевому слову.
Несмотря на то, что мы приращением индекс мы всегда
хотите, чтобы убедиться, что мы всегда обтекать к самому началу
никогда не превышая длина строки.
>> ОК, так что я знаю, что это может быть немного подавляющим.
Там очень много больше, чтобы сделать в этом р наборе.
Итак, убедитесь, что вы пишете из хороший псевдокод для себя
что вы понимаете и что выполняет свою работу.
Попробуйте обратиться каждый одиночная линия независимо друг от друга
выяснить все мало небольшие кусочки головоломки
прежде чем положить его вместе.
>> Убедитесь, что вы можете получить ключ из командной строки
и убедитесь, что это алфавитный, получить простой текст от пользователя,
а затем в шифровании, убедитесь, что вы знают, как зашифровать одну букву,
а затем переходите на всю строку со всеми обернуть вокруг функций.
И, наконец, вы можете распечатать шифротекста.
>> Меня зовут это Zamyla, и это было Vigenere.