>> Zamyla Chan: Kom ons stap ons spel met die vigenere cipher.
Die vigenere cipher is baie soortgelyk aan die keiser,
behalwe in die keiser geslaag ons in 'n enkele heelgetal as ons belangrikste.
In vigenere ons gaan En in 'n navraag.
Dus, as ek wou die skuif kriptoteks dit CS 50 deur ohai,
dan beteken dit dat elke letter in ohai gaan dien as die sleutel,
en ek gaan siklus die navraag vir my skof
maak die kriptoteks 'n veel moeiliker om te ontsyfer.
>> Wat beteken dit om skuif deur die navraag?
Wel, die navraag is 'n string waar elke brief ooreenstem
'n paar heelgetal verskuiwing.
So, die o ooreenstem met 'n sleutel van 14, h 'n sleutel van 7, 'n het 'n sleutel van 0,
sodat sal niks verander nie, en dan het ek 'n sleutel van 8.
>> Ek sê gehardloop vigenere A by die plain text dit is CS50 goed,
wat sou eenvoudig gee my 'n onveranderde string.
Let daarop dat hierdie is gelykstaande aan hardloop Caesar met 'n sleutel van nul.
Trouens, hardloop vigenere met 'n enkele karakter
gelykstaande aan loop sou wees Caesar met daardie selfde heelgetal.
>> Goed, so, want hulle is so soortgelyk Ek wil
eintlik beveel aan dat as jy wil kan jy net jou Caesar kopieer
kode in jou vigenere kode.
Dinge sal verander, maar ten minste het jy
sommige ruggraat wat jy kan werk.
Omdat die Todos is dieselfde wat ons wil om die sleutel te kry, kry die gewone teks,
versleutelen dat gewone teks, en dan druk wat uit.
>> Net soos die keiser die sleutel gaan geslaag word as die tweede command line
argument vervat in argv indeks 1, maar dit is verskillende hierdie tyd
want dit moet alfabeties wees.
So, moet ons oor Itereer elke enkele karakter in daardie sleutel
dat die gebruiker geslaag, en verseker dat elke karakter is alfabetiese
om voort te gaan.
>> Sodra ons dit gedoen het, dan moet ons kan die string te kry van die gebruiker,
net soos ons gedoen het voor.
En nou, kom ons by die hart van die probleem vir vigenere,
wat net soos die keiser, hoe om uit te vind die geheimschrift patroon
en vergelyking, en versleutelen die hele plat.
>> So, sal jy sien dat die vergelyking vir die vigenere verskuiwing
is baie soortgelyk aan die keiser een.
Die enigste verskil is dat in plaas van 'n enkele veranderlike k
voor, nou k het 'n onderskrif, dui die JTH letter van die sleutel.
>> Kom ons loop deur 'n voorbeeld.
Sê jy wou 'n geheime slaag boodskap op jou geliefde, ek hou van jou.
Wel, vir jou sleutel jy kies iets wat jou
weet geliefdes weet wat jy wil, pandas.
Goed, so hoe kan ons hierdie skuif?
>> Wel, ons het ons skoonteks-indeks.
Dit is op die eerste letter en so is die indeks vir ons sleutel
wat by die p, die eerste brief in ons Panda woord.
So, die verskuiwing ek deur p gee ons x, dan bevorder ons die skoonteks-indeks.
Dit kry ons 'n ruimte.
Nou, die ruimte karakter is nie alfabetiese,
so dit beteken dat, wat net oordrag reg oor die kriptoteks,
Ons laat 'n plek daar, en ons doen nie bevorder die indeks vir ons sleutel.
So, ons is nog steeds op p op hierdie punt.
>> Ons bevorder na die volgende indeks in ons plat.
En nou, want dit is 'n brief, die klein l,
Ons skuif wat deur die volgende indeks in ons sleutel.
Dit is 'n wat 'n nul verskuiwing sodat net raak
'n l in ons kriptoteks.
Dan, te bevorder ons albei die skoonteks, en die hoofindeks want dis alfabetiese.
So dan gaan ons voort wat totdat ons by die e in dies meer.
>> Goed, so jy sal sien in hierdie wys dat, in terme van ons belangrikste indeks,
Ons het die einde van bereik die panda woord, so what
gebeur wanneer ons by die volgende alfabetiese letter in die plat?
Wel, al wat gebeur is ons draai om na die begin,
om die eerste indeks van ons sleutel.
So, dan skuif ons dat y deur p aan ons N gee.
En dan, gaan ons voort afwerking enkodering ons skoonteks na x lvne Noh kry.
>> Uit hierdie voorbeeld, ek het getoon dat ons net vooraf
na die volgende brief in die navraag As die karakter in plain text
is 'n brief so die isalpha funksie sal handig te pas kom hier.
En, net soos in die keiser, wil ons die behoud van die geval, isupper en islower.
So, voeg dit bietjie in in jou pseudokode.
>> So hoe kan ons uitvind die sleutel skofte?
Wel, as jy onthou ons gesprek op alfabetiese indekse in die keiser
probleem, dit is baie soortgelyk.
>> Waar 'n stem ooreen met 'n ASCII waarde van 65, maar 'n verskuiwing van 0,
en dan die laaste brief in die alfabet, Z,
stem ooreen met 'n verskuiwing van 25.
Jy sal sien dat die verskuiwing identies of
die brief is hoofletters of kleinletters.
>> OK, so nou dat jy weet hoe om uit te vind
die numeriese verskuiwing wat stem ooreen met 'n enkele karakter
Kom ons gaan terug na ons vergelyking.
Want ons het twee verskillende onderskrifte hier, I en J,
dit is 'n aanduiding dat ons wil om tred te hou van beide ons posisie in die skoonteks
asook ons ​​posisie in die navraag, so dit is twee aparte veranderlikes
dat ons wil 'n greep van hou.
>> Nou, die posisie in ons skoonteks gaan elke keer te verhoog,
sodat gaan 'n wees bietjie meer reguit vorentoe
in teenstelling met die posisie van die term, wat ons weet het om rond te draai,
en soms inkrementeer, soms dieselfde bly.
So, hoe kan ons implementeer die funksie
om te draai rondom die indeks vir die navraag?
>> Ek gaan die tel af voorbeeld gebruik.
Tel af is 'n gewilde manier om mense in groepe verdeel.
Ek sê gehad 5 mense en ek wou verdeel hulle in drie groepe,
goed dan sou ek begin deur te tel af.
Die eerste persoon sou sê ek is span nommer een,
die volgende persoon sou span getal wees twee, die derde persoon span aantal
drie.
Nou wil ek net drie groepe so die vierde persoon sou eintlik
begin by die begin en sê: Wel, ek is span nommer een so goed,
en die volgende persoon sou span nommer twee wees.
En van daar af, kan hulle dan skei in hulle groepe.
>> So, hoe kan ek gebruik modulo om my te help implementeer
hierdie tel af wrap rondom funksie?
Wel, die eerste persoon nommer 1, mod 3 gee ons 1.
2 mod 3 gee ons 2, en 3 mod 3 gee ons 0.
>> Die vierde persoon, nommer 4, mod 3 gee ons 1, en dan 5 mod 3 gee ons 2.
So, sal jy agterkom dat alhoewel die aantal mense wat ek het
verhoog, en bo 3, aangesien ek modding deur 3
Ek kry altyd getalle 0, 1, en 2.
Ek het nog nooit kry groter as 3.
So dan, selfs al het ek 10 mense, dan is almal van die mense
sou nog wees binne groepe 1, 2, of 0.
>> So, nou weet ons dat as ons 'n groep van 5 en ons mod al daardie deur 3,
dan is ons nooit gaan oorskry groepe 0, 1, of 2.
So, ons nooit gaan 'n groep te kry aantal dis gelyk aan 3 of hoër.
So, selfs as ek voeg nog vyf mense, dan is almal van hulle
steeds sal word aan groepe 0, 1, of 2 want ek modding deur 3.
Ek is nooit gaan dat cap oorskry.
>> OK, so laat ons kyk of ons kan aansoek doen hierdie konsep van die gebruik modulo
om te draai rondom die groep getalle en toe te pas
dit vigenere waar ons wil om modulo gebruik om rond te draai
die indeks vir die navraag.
Selfs al is ons die verhoog die indeks het ons altyd
wil om seker te maak dat ons altyd draai om na die begin
nooit meer as die lengte van die string.
>> OK, so ek weet dit kan wees 'n bietjie oorweldigend.
Daar is 'n baie meer om te doen in hierdie p stel.
So, maak seker dat jy skryf 'n goeie pseudokode vir jouself
dat jy verstaan ​​en wat kry die werk gedoen.
Probeer en spreek elke enkele lyn onafhanklik
uitzoeken al die klein klein stukkies van die legkaart
voordat die samestelling daarvan.
>> Maak seker dat jy kan kry die sleutel uit die opdrag lyn
en verseker dat dit alfabetiese, kry die gewone teks van die gebruiker,
en dan in geheimschrift, maak seker dat jy weet hoe om 'n enkele brief versleutelen,
en dan vorder na die hele string met al die wrap rondom funksies.
Ten slotte, kan jy die kriptoteks druk.
>> My naam is 'n Zamyla, en dit was vigenere.