>> Zamyla Chan: Niech zintensyfikować nasze Gra z szyfrem Vigenère.
Szyfr vigenère'a jest bardzo podobny do Cezara,
oprócz Cezara mijaliśmy się jedna liczba całkowita, jak nasz klucz.
W Vigenère jedziemy przejść na jedno ze słów kluczowych.
Tak więc, jeśli chcę, aby przesunąć szyfrogram jest CS 50 przez Ohai,
to oznacza, że ​​w każdej litery Ohai będzie służyć jako klucz,
a ja jadę nad cyklem że kluczowe dla mojej zmiany
dokonywania szyfrogram o wiele trudniej rozszyfrować.
>> Co to znaczy przejście przez hasła?
Cóż, słowo jest ciągiem gdzie każda litera odpowiada
pewne zmiany całkowitej.
Tak więc, o odpowiada przyciskowi 14, h do klawisza 7, a ma klawisza 0,
tak, że nie zmienia nic, a potem ma klucz 8.
>> Say Pobiegłem Vigenère A z zwykły tekst to CS50 dobrze,
że po prostu zrezygnować mi niezmieniony łańcuch.
Należy zauważyć, że jest to równoważne uruchomiony Cezara z kluczem od zera.
W rzeczywistości działa Vigenère z każdym pojedynczym znakiem
byłoby równoznaczne z uruchomieniem Cesarska z tej samej liczby całkowitej.
>> W porządku, więc, ponieważ są one tak podobne I dalszy
naprawdę polecam, że jeśli chcesz, możesz po prostu skopiować Cezara
Kod do kodu Vigenère.
Wszystko się zmienia, ale przynajmniej masz
niektóre szkieletowa, że ​​można pracować.
Ponieważ TODO są takie same chcemy aby dostać klucz, uzyskać zwykły tekst,
encipher, że zwykły tekst, a następnie wydrukować na zewnątrz.
>> Podobnie jak Cezar kluczem będzie zostać przekazany jako drugiej linii poleceń
Argument zawarty w indeksie argv 1, ale tym razem jest inaczej
ponieważ musi być w kolejności alfabetycznej.
Tak więc, musimy iteracyjne nad każdym pojedynczy znak w tym kluczu
że użytkownik przekazany, oraz zapewnienie że każda postać jest alfabetyczna
aby kontynuować.
>> Kiedy zrobiliśmy, to wtedy można uzyskać ciąg od użytkownika,
tak jak przedtem.
I teraz dochodzimy do sedna problemu dla Vigenère
który podobnie jak Cezar, w jaki sposób dowiedzieć się wzór szyfrujących
a równanie i encipher cały tekst jawny.
>> Tak więc, można zauważyć, że Równanie na przesunięcie Vigenère
jest bardzo podobny do Cezara.
Jedyną różnicą jest to, że Zamiast pojedynczej zmiennej k
, teraz k ma indeks, wskazując j literę klawisza.
>> Chodźmy na przykładzie.
Powiedzmy, że chciał przekazać tajemnicę komunikat na swojej sympatii, lubię cię.
Cóż, dla klucza, wybrać coś, że twój
wiem zgniatać wie, że chcesz, pandy.
No dobrze, więc w jaki sposób zmiany tego?
>> Cóż, mamy indeks zwykłego tekstu.
To na pierwszą literę i tak jest indeksem dla naszego klucza
który znajduje się na str pierwsze List w naszym panda słowa.
Więc, zmieniając I daje nam przez p x, następnie przesunąć wskaźnik zwykłego tekstu.
To sprowadza nas do przestrzeni.
Teraz, spacja nie jest alfabetyczna,
tak, że oznacza to, że to właśnie transfery tuż nad do szyfrogramu,
stawiamy spację tam, a my nie przesunąć wskaźnik dla naszego klucza.
Tak, nadal jesteśmy przy p w tym momencie.
>> Mamy przejść do następnego Indeks w naszym zwykłego tekstu.
A teraz, bo to jest pismo, mała litera l,
przesuwamy, że przez następny indeks w naszym kluczem.
Która jest, co jest zero shift, dzięki czemu staje się po prostu
literą L na naszym szyfrogramu.
Następnie możemy przejść zarówno jawny, a indeks klucza, ponieważ jest alfabetyczna.
Tak więc w dalszym ciągu, że aż dojdziemy do e w podobne.
>> No dobrze, więc można zauważyć, w tym wskazują, że w warunkach naszego indeksu klucza,
doszliśmy do końca słowo panda, więc co
się dzieje, gdy mamy do następnego alfabetyczne pismo w postaci zwykłego tekstu?
Cóż, wszystko, co się dzieje, mamy zawinięcia do początku,
do pierwszego indeksu z kluczowych.
Tak, to, że przesunięcie y przez p, aby dać nam n.
A potem, nadal wykończeniowych kodowanie Nasz tekst jawny, aby uzyskać x lvne nOH.
>> W tym przykładzie, pokazały, że mamy tylko przejść
do następnej litery w słowie kluczowym jeśli postać zwykłego tekstu
jest literą więc isalpha Funkcja ta przyda się tutaj.
I, podobnie jak w Cezara, chcemy zachowania sprawy, isupper i islower.
Tak, dodaj trochę w do swojego Pseudokod.
>> Więc w jaki sposób dowiedzieć się, najważniejsze zmiany?
Cóż, jeśli przypomnieć sobie naszą dyskusję na indeksach alfabetycznych w Cezara
Problemem jest to bardzo podobne.
>> W którym A odpowiada ASCII wartość 65, ale przesunięcie 0,
a następnie ostatni list w alfabecie, Z,
odpowiada przesunięciu o 25.
Zauważysz, że przesunięcie są identyczne, czy
list jest wielkie litery lub małe litery.
>> OK, więc teraz, że wiedzieć, jak dowiedzieć się,
zmiana liczbowa odpowiada pojedynczemu znakowi
Wróćmy do naszego równania.
Ponieważ mamy dwa różne indeksy tutaj, I i J,
to wskazówka, że ​​chcemy śledzić zarówno naszej pozycji w postaci zwykłego tekstu
a także naszej pozycji w kluczowych, To są dwa oddzielne zmienne
że chcemy zachować luku.
>> Teraz sytuacja w naszym zwykłego tekstu zamierza zwiększyć za każdym razem,
więc to będzie nieco bardziej prosto do przodu
w przeciwieństwie do stanowiska słów kluczowych które znamy musi zawijane
a czasem zwiększyć, czasami pozostają takie same.
Tak więc, w jaki sposób zaimplementować funkcjonalność
owinąć wokół Indeks dla słowa kluczowego?
>> Zamierzam użyć odlicz przykład.
Liczenie off jest popularnym sposobem podzielić na grupy ludzi.
Powiedzieć, że miał 5 osób i chciałem je podzielić na trzy grupy,
a następnie chciałbym zacząć od liczenia off.
Pierwsza osoba powiedzieć, że jestem numerem jeden zespół,
następna osoba byłaby liczba Zespół dwa, numer zespołu trzecia osoba
trzy.
Teraz chcę tylko trzech grup tak, czwarta osoba faktycznie
rozpocząć na początku i powiedzieć: dobrze, ja jestem numerem jeden zespół, a także,
a następna osoba Zespół będzie numer dwa.
A stamtąd, mogą następnie oddzielić w ich grupach.
>> Tak, jak mogę wykorzystać modulo mi pomóc wdrożyć
Ten odlicz owinąć wokół funkcji?
Cóż, pierwsza osoba Numer 1, mod 3 daje nam 1.
2 mod 3 daje nam 2, i 3 mod 3 daje nam 0.
>> Czwarta osoba, numer 4, mod 3 daje nam 1, a następnie 5 mod 3 daje nam 2.
Tak więc, można zauważyć, że chociaż liczba osób, które mam
wzrasta, i jest większa 3, ponieważ jestem modding przez 3
Zawsze uzyskać numery 0, 1 i 2.
I nigdy nie większy niż 3.
Tak więc, nawet gdybym miał 10 ludzi, to wszystkie z tych osób
nadal mieścić się w grupach 1, 2 lub 0.
>> Więc teraz wiemy, że jeśli mamy grupę 5 i mod wszystkich tych, przez 3,
wtedy nie będziemy przekroczyć grupy 0, 1 lub 2.
Tak więc nigdy nie dostanie grupę Numer to równy 3 lub wyżej.
Tak więc, nawet jeśli dodać kolejne pięć ludzi, to wszystkie z nich
Nadal będzie przypisany do grupy 0, 1 lub 2, bo jestem modding przez 3.
Nigdy nie zamierzam przekraczać tę czapkę.
>> OK, więc zobaczymy, czy możemy zastosować Ta koncepcja stosowania modulo
owinąć wokół Numery grup i zastosować
go Vigenère gdzie chcemy użyć modulo do zawinięcia
indeks dla słowa kluczowego.
Nawet jeśli mamy zwiększany indeks zawsze
Aby upewnić się, że zawsze zawinięcia do samego początku
Nigdy przekroczenie długość łańcucha.
>> OK, więc wiem, że to może być trochę przytłaczające.
Jest wiele do zrobienia w tym zestawie s.
Więc upewnij się, że masz pisać dobry Pseudokod dla siebie
że rozumie i który dostaje zadanie.
Spróbuj rozwiązać każdy Pojedyncza linia niezależnie
zastanawianie się wszystkie małe małe kawałki układanki
przed wprowadzeniem go razem.
>> Upewnij się, że można dostać klucz z wiersza poleceń
i upewnić się, że jest to alfabetyczna, uzyskać zwykły tekst od użytkownika,
a potem w szyfrujących, upewnij się, wiedzieć, jak encipher pojedynczą literę,
a następnie przejście do całego łańcucha ze wszystkimi zawinięcia funkcji.
Wreszcie, można wydrukować tekst zaszyfrowany.
>> Nazywam to Zamyla, i był to Vigenère.