[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.