1 00:00:00,000 --> 00:00:10,101 >> [Muziek] 2 00:00:10,101 --> 00:00:12,700 >> ZAMYLA CHAN: Let's implementeren Vigenere, een iets 3 00:00:12,700 --> 00:00:14,710 beveiligen cipher dan Caesar. 4 00:00:14,710 --> 00:00:19,670 De platte tekst wordt versleuteld met behulp van een reeks in plaats van een geheel getal. 5 00:00:19,670 --> 00:00:22,970 Elke letter uit het alfabet in platte tekst wordt verschoven naar een 6 00:00:22,970 --> 00:00:24,450 brief in het sleutelwoord. 7 00:00:24,450 --> 00:00:30,860 >> In dit voorbeeld is de trefwoord ohai, O komt overeen met een verschuiving van 14, H de 8 00:00:30,860 --> 00:00:36,910 verschuiving van 7, A, verschuiving van 0, I en een verschuiving van 8. 9 00:00:36,910 --> 00:00:40,710 Als je succes hebt geïmplementeerd uw Caesar cipher, het zal een leuke 10 00:00:40,710 --> 00:00:43,510 raamwerk van waaruit u kan Vigenere implementeren. 11 00:00:43,510 --> 00:00:47,140 Zoals u kunt zien, het runnen van een Vigenere cipher met een karakter als een 12 00:00:47,140 --> 00:00:51,830 zoekwoord is hetzelfde als Caesar cipher. 13 00:00:51,830 --> 00:00:55,170 >> Dezelfde stappen gelden voor Vigenère zoals ze deden in Caesar. 14 00:00:55,170 --> 00:01:01,240 Het sleutelwoord is de tweede commandoregel argument, zodat u toegang tot het met argv1. 15 00:01:01,240 --> 00:01:05,400 Dan moet je om te controleren of de sleutel woord is inderdaad alles alfabetisch. 16 00:01:05,400 --> 00:01:09,040 Hier is waar is alfa kan van pas komen. 17 00:01:09,040 --> 00:01:13,550 Als u een geldige trefwoord, krijgt u de kracht van de gebruiker, en vervolgens 18 00:01:13,550 --> 00:01:15,820 je bent klaar om te vercijferen. 19 00:01:15,820 --> 00:01:20,840 >> De Vigenere cipher formule is vergelijkbaar Caesar formule, behalve nu k 20 00:01:20,840 --> 00:01:27,650 wordt k subscript j, wat aangeeft de j-de letter van het trefwoord. 21 00:01:27,650 --> 00:01:29,640 Laten we stap voor stap door dit proces. 22 00:01:29,640 --> 00:01:34,060 Zeggen dat je wilde om een ​​bericht te sturen naar uw crash, ik vind je leuk, maar je doet niet 23 00:01:34,060 --> 00:01:35,190 wil dat iedereen weet. 24 00:01:35,190 --> 00:01:39,800 Zodat je een Vigenere cipher met het gebruik trefwoord panda, omdat, nou ja, u ook 25 00:01:39,800 --> 00:01:41,160 zoals panda's. 26 00:01:41,160 --> 00:01:47,140 >> De eerste letter, ik, zal worden verschoven door p, het geven van x, 15 brieven nadat ik, 27 00:01:47,140 --> 00:01:52,850 omdat 15 p de 16e letter van het alfabet. 28 00:01:52,850 --> 00:01:56,750 De volgende letter in de platte tekst is een ruimte, zodat dat niet zal worden verschoven. 29 00:01:56,750 --> 00:02:00,420 En de index van het zoekwoord zal niet veranderen. 30 00:02:00,420 --> 00:02:05,440 >> Dan is de volgende letter in platte tekst is l, verschoven naar een, die niet verschuift 31 00:02:05,440 --> 00:02:10,930 de platte tekst brief helemaal niet, want een is de 0 letter van het alfabet. 32 00:02:10,930 --> 00:02:14,980 Het proces gaat verder, het bevorderen van de trefwoord karakter elke keer als er een 33 00:02:14,980 --> 00:02:16,840 brief in de platte tekst. 34 00:02:16,840 --> 00:02:21,850 Zodra de laatste letter in het zoekwoord bereikt, het trefwoord wraps rond en 35 00:02:21,850 --> 00:02:25,890 verschuift naar de volgende vlakte tekst schrijven door p. 36 00:02:25,890 --> 00:02:27,170 X lvne noh. 37 00:02:27,170 --> 00:02:29,180 Hoe romantisch. 38 00:02:29,180 --> 00:02:33,120 >> Dus gegeven een personage, hoe ga je om te zetten dat in de overeenkomstige 39 00:02:33,120 --> 00:02:34,590 cipher shift? 40 00:02:34,590 --> 00:02:37,870 Probeer het vergelijken van de ASCII waarden om de verschuiving. 41 00:02:37,870 --> 00:02:41,530 Misschien kunt u een relatie te vinden tussen de letters en hun 42 00:02:41,530 --> 00:02:44,550 alfabetische index met behulp van ASCII-wiskunde. 43 00:02:44,550 --> 00:02:48,850 Kunt u een karakter toe te voegen of af te trekken van een ander te krijgen 44 00:02:48,850 --> 00:02:51,630 u het gewenste resultaat? 45 00:02:51,630 --> 00:02:55,480 >> Vergeet niet dat de verschuivingen voor hoofdletters en kleine letters zijn hetzelfde. 46 00:02:55,480 --> 00:02:59,510 Dus misschien moet je twee identificeren vergelijkbaar formules te vertegenwoordigen 47 00:02:59,510 --> 00:03:03,570 shift, een voor een hoofdletter trefwoord karakter, en een 48 00:03:03,570 --> 00:03:06,510 voor een kleine een. 49 00:03:06,510 --> 00:03:10,630 >> Vervolgens, bedenk dan dat het zoekwoord vooruitgang alleen als het personage in 50 00:03:10,630 --> 00:03:13,520 platte tekst is een brief en dat Voor de vlakte 51 00:03:13,520 --> 00:03:16,020 tekst moet worden bewaard. 52 00:03:16,020 --> 00:03:20,280 Dus als we kijken naar de formule voor de Vigenere shift zijn er twee index 53 00:03:20,280 --> 00:03:22,880 variabelen i en j. 54 00:03:22,880 --> 00:03:26,795 Een houdt de positie in de vlakte tekst, en de andere de positie 55 00:03:26,795 --> 00:03:27,910 in het sleutelwoord. 56 00:03:27,910 --> 00:03:32,960 Maar uw platte tekst kan veel langer zijn dan uw zoekwoord, in dat geval uw 57 00:03:32,960 --> 00:03:38,290 keyword index moet rond terug wikkelen aan het begin van het zoekwoord. 58 00:03:38,290 --> 00:03:39,870 >> Hoe doe je dit? 59 00:03:39,870 --> 00:03:43,740 Laten we eens kijken terug op de modulo operator. 60 00:03:43,740 --> 00:03:47,280 Modulo wordt gedefinieerd is de rest verdelen twee getallen. 61 00:03:47,280 --> 00:03:50,680 Maar wat is een echte praktische gebruik van modulo? 62 00:03:50,680 --> 00:03:54,340 >> Nou, stel dat je een grote groep mensen, en je moet verdelen in 63 00:03:54,340 --> 00:03:55,100 drie groepen. 64 00:03:55,100 --> 00:03:59,500 Een manier om mensen te verdelen in groepen is om ze te tellen af. 65 00:03:59,500 --> 00:04:03,520 U het nummer van de groep groepen 1, 2 en 3. 66 00:04:03,520 --> 00:04:08,510 De eerste persoon zal zeggen 1, De volgende 2, de volgende 3. 67 00:04:08,510 --> 00:04:12,860 De persoon na die zullen zeggen: 1, want er is geen groep 4, en de 68 00:04:12,860 --> 00:04:15,880 telling begint dan vanaf daar. 69 00:04:15,880 --> 00:04:18,209 >> U kunt modulo gebruiken om hetzelfde doen. 70 00:04:18,209 --> 00:04:22,680 Deze keer, de groepen zal zijn groep 0, 1 en 2. 71 00:04:22,680 --> 00:04:26,960 De eerste persoon, getal 1 modulo 3, is 1. 72 00:04:26,960 --> 00:04:29,830 Persoon 2 modulo 3 is 2. 73 00:04:29,830 --> 00:04:32,460 Persoon 3 modulo 3 0. 74 00:04:32,460 --> 00:04:38,470 Persoon 4 modulo 3 geeft 1, enzovoort de groepen rond kan wikkelen. 75 00:04:38,470 --> 00:04:44,700 >> Dus als je een index en modulo nemen die index door een maximale grootte, het 76 00:04:44,700 --> 00:04:49,820 resultaat zal nooit groter zijn dan of zijn gelijk aan de omvang, waardoor u 77 00:04:49,820 --> 00:04:52,330 kan de index te verhogen als zoveel als u wilt. 78 00:04:52,330 --> 00:04:57,400 En zolang je de index Modulo door een getal, zult u niet een nummer te krijgen 79 00:04:57,400 --> 00:04:58,510 groter dan dat. 80 00:04:58,510 --> 00:05:04,500 We hebben dus 10 mensen in plaats van 5, en ze zouden krijgen allemaal toegewezen aan groepen 81 00:05:04,500 --> 00:05:07,480 getal 0, 1 of 2. 82 00:05:07,480 --> 00:05:11,680 >> Probeer om deze toe te passen op wikkelen over de keyword, behalve in plaats van sorteren 83 00:05:11,680 --> 00:05:16,050 mensen in de groep nummers die u wilt dat de index van het zoekwoord, zodat u kunt 84 00:05:16,050 --> 00:05:19,080 krijg het juiste karakter voor de verschuiven zonder overschrijding van de 85 00:05:19,080 --> 00:05:21,836 lengte van de tekenreeks. 86 00:05:21,836 --> 00:05:24,790 Met dat, heb je je Vigenere cipher. 87 00:05:24,790 --> 00:05:27,790 Mijn naam is Zamyla, en dit is CS50. 88 00:05:27,790 --> 00:05:32,566