>> [Musik Spela]
>> ZAMYLA CHAN: Låt oss genomföra Vigenère, en något mer
säkra chiffer än Caesar.
Den klartext krypterad med en sträng i stället för ett heltal.
Varje bokstav i klartext skiftas med en
bokstaven i nyckelordet.
>> I detta exempel sökordet ohai, O motsvarar en förskjutning av 14, H till en
skifta av 7, A, förskjutning av 0, och jag en förskjutning av 8.
Om du har framgångsrikt genomfört din Caesar chiffer, det ska vara en trevlig
ram från vilken du kan implementera Vigenère.
Som ni kan se, kör en Vigenère chiffer med en enda karaktär som en
nyckelordet är samma sak som Caesar chiffer.
>> Samma steg gäller Vigenère som de gjorde i Caesar.
Nyckelordet är den andra kommandorad argument, så du kommer åt den med argv1.
Då måste du kontrollera att nyckeln Ordet är verkligen allt alfabetisk.
Här är där är alpha kan komma till hands.
Om du har ett giltigt sökord, får du styrka från användaren, och sedan
du är redo att kryptera.
>> Den Vigenère chiffer formeln är likartad till Caesar formel, utom nu k
blir k nedsänkt j, som anger den j: te bokstaven i nyckelordet.
Låt oss gå igenom denna process.
Säg att du vill skicka ett meddelande till dig krasch, jag gillar dig, men du gör inte
vill att alla ska veta.
Så du använder en Vigenère chiffer med sökord panda, eftersom, ja, du också
gillar pandas.
>> Den första bokstaven,, jag kommer att flyttas med p, vilket ger x, 15 bokstäver efter att jag,
eftersom 15 p är den 16: e bokstav i alfabetet.
Nästa bokstav i klartext är ett utrymme, så att inte kommer att förskjutas.
Och indexet för sökordet kommer inte att förändras.
>> Sedan nästa bokstav i klartext är L, flyttas med en, vilket inte flyttas
slätten text brev alls, eftersom a är den 0: e bokstaven i alfabetet.
Processen fortsätter, tidigareläggning av sökord karaktär varje gång det finns en
brev i klartext.
När den sista bokstaven i nyckelordet är nåtts, sveper sökordet runt och
skift till nästa slätten text brev från sid.
X lvne noh.
Hur romantiskt.
>> Så med tanke på en karaktär, hur du konverterar att i motsvarande
chiffrera skift?
Försök jämföra ASCII värden till skiftet.
Kanske kan du hitta en relation mellan bokstäverna och deras
alfabetiskt register med ASCII matematik.
Kan du lägga till eller dra ifrån ett tecken från en annan för att få
du det önskade resultatet?
>> Kom ihåg att de skiften för versaler och gemener är desamma.
Så kanske du måste identifiera två liknande formler för att representera
skift, en för ett versalt nyckelordet karaktär, och en
för ett gement en.
>> Nästa, kom ihåg att sökordet förskott endast om karaktären i
klartext är en bokstav och att fallet med vanlig
text måste bevaras.
Så om vi tittar på formeln för Vigenère skift, det finns två index
variabler, i och j.
Man håller reda på positionen i klartext text, och den andra positionen
i nyckelordet.
Men din oformaterad text kan vara mycket längre än ditt sökord, i vilket fall ditt
sökordsindex behöver att linda runt tillbaka till början av sökordet.
>> Hur gör du det här?
Låt oss titta tillbaka på modulo-operator.
Modulo definieras är resten att dela upp två tal.
Men vad är en faktisk praktisk användning av modulo?
>> Tja, säg att du har en stor grupp människor, och du måste dela upp i
tre grupper.
Ett sätt att dela in människor i grupper är att få dem att räkna ut.
Du numret grupperna gruppen nummer 1, 2, och 3.
Den första personen kommer att säga 1, nästa 2, nästa 3.
Den person efter som kommer att säga 1, eftersom det inte finns en grupp 4, och
räkningen börjar om därifrån.
>> Du kan använda modulo till göra samma sak.
Den här gången, grupperna kommer vara grupp 0, 1, och 2.
Den första personen, antal 1 modulo 3 är 1.
Person 2 modulo 3 är 2.
Person 3 modulo 3 är 0.
Person 4 modulo 3 ger 1, och så grupperna kan linda runt.
>> Så om du tar ett index och modulo som index med en maximal storlek,
Resultatet kommer aldrig vara större än eller lika med storleken, vilket innebär att du
kan öka index som mycket som du vill.
Och så länge du modulo index med några nummer, kommer du inte få ett nummer
större än så.
Så vi har 10 personer i stället för 5, och de skulle alla få tilldelas grupper
nummer 0, 1, eller 2.
>> Försök att tillämpa detta på inslagning över nyckelordet, utom i stället för sortering
folk in gruppnummer du vill index för sökordet så att du kan
få rätt karaktär för flytta utan att överskrida
strängens längd.
Med detta har du din Vigenère chiffer.
Mitt namn är Zamyla, och detta är CS50.