[Muziek] ZAMYLA CHAN: Let's implementeren Vigenere, een iets beveiligen cipher dan Caesar. De platte tekst wordt versleuteld met behulp van een reeks in plaats van een geheel getal. Elke letter uit het alfabet in platte tekst wordt verschoven naar een brief in het sleutelwoord. In dit voorbeeld is de trefwoord ohai, O komt overeen met een verschuiving van 14, H de verschuiving van 7, A, verschuiving van 0, I en een verschuiving van 8. Als je succes hebt geïmplementeerd uw Caesar cipher, het zal een leuke raamwerk van waaruit u kan Vigenere implementeren. Zoals u kunt zien, het runnen van een Vigenere cipher met een karakter als een zoekwoord is hetzelfde als Caesar cipher. Dezelfde stappen gelden voor Vigenère zoals ze deden in Caesar. Het sleutelwoord is de tweede commandoregel argument, zodat u toegang tot het met argv1. Dan moet je om te controleren of de sleutel woord is inderdaad alles alfabetisch. Hier is waar is alfa kan van pas komen. Als u een geldige trefwoord, krijgt u de kracht van de gebruiker, en vervolgens je bent klaar om te vercijferen. De Vigenere cipher formule is vergelijkbaar Caesar formule, behalve nu k wordt k subscript j, wat aangeeft de j-de letter van het trefwoord. Laten we stap voor stap door dit proces. Zeggen dat je wilde om een ​​bericht te sturen naar uw crash, ik vind je leuk, maar je doet niet wil dat iedereen weet. Zodat je een Vigenere cipher met het gebruik trefwoord panda, omdat, nou ja, u ook zoals panda's. De eerste letter, ik, zal worden verschoven door p, het geven van x, 15 brieven nadat ik, omdat 15 p de 16e letter van het alfabet. De volgende letter in de platte tekst is een ruimte, zodat dat niet zal worden verschoven. En de index van het zoekwoord zal niet veranderen. Dan is de volgende letter in platte tekst is l, verschoven naar een, die niet verschuift de platte tekst brief helemaal niet, want een is de 0 letter van het alfabet. Het proces gaat verder, het bevorderen van de trefwoord karakter elke keer als er een brief in de platte tekst. Zodra de laatste letter in het zoekwoord bereikt, het trefwoord wraps rond en verschuift naar de volgende vlakte tekst schrijven door p. X lvne noh. Hoe romantisch. Dus gegeven een personage, hoe ga je om te zetten dat in de overeenkomstige cipher shift? Probeer het vergelijken van de ASCII waarden om de verschuiving. Misschien kunt u een relatie te vinden tussen de letters en hun alfabetische index met behulp van ASCII-wiskunde. Kunt u een karakter toe te voegen of af te trekken van een ander te krijgen u het gewenste resultaat? Vergeet niet dat de verschuivingen voor hoofdletters en kleine letters zijn hetzelfde. Dus misschien moet je twee identificeren vergelijkbaar formules te vertegenwoordigen shift, een voor een hoofdletter trefwoord karakter, en een voor een kleine een. Vervolgens, bedenk dan dat het zoekwoord vooruitgang alleen als het personage in platte tekst is een brief en dat Voor de vlakte tekst moet worden bewaard. Dus als we kijken naar de formule voor de Vigenere shift zijn er twee index variabelen i en j. Een houdt de positie in de vlakte tekst, en de andere de positie in het sleutelwoord. Maar uw platte tekst kan veel langer zijn dan uw zoekwoord, in dat geval uw keyword index moet rond terug wikkelen aan het begin van het zoekwoord. Hoe doe je dit? Laten we eens kijken terug op de modulo operator. Modulo wordt gedefinieerd is de rest verdelen twee getallen. Maar wat is een echte praktische gebruik van modulo? Nou, stel dat je een grote groep mensen, en je moet verdelen in drie groepen. Een manier om mensen te verdelen in groepen is om ze te tellen af. U het nummer van de groep groepen 1, 2 en 3. De eerste persoon zal zeggen 1, De volgende 2, de volgende 3. De persoon na die zullen zeggen: 1, want er is geen groep 4, en de telling begint dan vanaf daar. U kunt modulo gebruiken om hetzelfde doen. Deze keer, de groepen zal zijn groep 0, 1 en 2. De eerste persoon, getal 1 modulo 3, is 1. Persoon 2 modulo 3 is 2. Persoon 3 modulo 3 0. Persoon 4 modulo 3 geeft 1, enzovoort de groepen rond kan wikkelen. Dus als je een index en modulo nemen die index door een maximale grootte, het resultaat zal nooit groter zijn dan of zijn gelijk aan de omvang, waardoor u kan de index te verhogen als zoveel als u wilt. En zolang je de index Modulo door een getal, zult u niet een nummer te krijgen groter dan dat. We hebben dus 10 mensen in plaats van 5, en ze zouden krijgen allemaal toegewezen aan groepen getal 0, 1 of 2. Probeer om deze toe te passen op wikkelen over de keyword, behalve in plaats van sorteren mensen in de groep nummers die u wilt dat de index van het zoekwoord, zodat u kunt krijg het juiste karakter voor de verschuiven zonder overschrijding van de lengte van de tekenreeks. Met dat, heb je je Vigenere cipher. Mijn naam is Zamyla, en dit is CS50.