1 00:00:00,000 --> 00:00:00,930 2 00:00:00,930 --> 00:00:04,030 >> Zamyla Chan: Gadewch i ni gamu i fyny ein gêm gyda y cipher vigenere. 3 00:00:04,030 --> 00:00:06,710 Mae'r cipher vigenere yw debyg iawn i Gesar, 4 00:00:06,710 --> 00:00:11,060 ac eithrio yn Cesar rydym yn pasio mewn cyfanrif sengl fel ein allweddol. 5 00:00:11,060 --> 00:00:14,100 Yn vigenere rydym yn mynd i basio mewn allweddair. 6 00:00:14,100 --> 00:00:19,400 Felly, os wyf yn awyddus i symud y ciphertext hyn yw CS 50 erbyn ohai, 7 00:00:19,400 --> 00:00:23,260 yna mae hynny'n golygu bod pob llythyr yn ohai yn mynd i wasanaethu fel y allweddol, 8 00:00:23,260 --> 00:00:27,160 a dw i'n mynd i feicio dros y gair allweddol ar gyfer fy sifft 9 00:00:27,160 --> 00:00:31,930 gan wneud y ciphertext llawer anoddach i ddadgodio. 10 00:00:31,930 --> 00:00:34,540 >> Beth mae'n ei olygu i symud gan y gair allweddol? 11 00:00:34,540 --> 00:00:38,610 Wel, yr allweddair yn llinyn lle mae pob llythyr yn cyfateb 12 00:00:38,610 --> 00:00:41,080 i ryw sifft cyfanrif. 13 00:00:41,080 --> 00:00:49,310 Felly, mae'r o yn cyfateb i allwedd o 14, h i allwedd o 7, mae ganddo allwedd o 0, 14 00:00:49,310 --> 00:00:54,670 fel na fyddai'n newid unrhyw beth, ac yna fi ganddo allwedd o 8. 15 00:00:54,670 --> 00:01:00,000 >> Dweud Rhedais vigenere A gyda'r testun plaen yw hyn yn CS50 yn dda, 16 00:01:00,000 --> 00:01:02,800 Byddai hynny yn syml yn rhoi mi llinyn heb ei newid. 17 00:01:02,800 --> 00:01:08,170 Sylwch fod hyn yn cyfateb i rhedeg Cesar gydag allwedd o sero. 18 00:01:08,170 --> 00:01:12,070 Yn wir, yn rhedeg vigenere gydag unrhyw nôd unigol 19 00:01:12,070 --> 00:01:17,070 fyddai'n cyfateb i redeg Cesar â'r un cyfanrif. 20 00:01:17,070 --> 00:01:20,400 >> Mae pob hawl, felly, gan fod eu bod mor debyg byddwn i'n 21 00:01:20,400 --> 00:01:24,300 mewn gwirionedd yn argymell, os ydych yn eisiau gallwch chi jyst adysgrifia eich Cesar 22 00:01:24,300 --> 00:01:26,932 cod i mewn i'ch cod vigenere. 23 00:01:26,932 --> 00:01:28,640 bydd pethau'n newid, ond o leiaf mae gennych 24 00:01:28,640 --> 00:01:31,110 rhywfaint o asgwrn cefn y gallwch weithio gyda nhw. 25 00:01:31,110 --> 00:01:36,410 Oherwydd bod y todos yr un fath yr ydym am i gael y allweddol, yn cael y testun plaen, 26 00:01:36,410 --> 00:01:40,690 encipher bod testun plaen, ac yna print that allan. 27 00:01:40,690 --> 00:01:44,980 >> Yn union fel Cesar yr allwedd yn mynd i yn cael eu trosglwyddo i mewn fel yr ail archa bannod 28 00:01:44,980 --> 00:01:50,540 dadl a gynhwysir yn y mynegai argv 1, ond mae'n wahanol y tro hwn 29 00:01:50,540 --> 00:01:52,560 oherwydd rhaid iddo fod yn nhrefn yr wyddor. 30 00:01:52,560 --> 00:01:56,390 Felly, mae angen i ni ailadrodd dros bob cymeriad unigol yn y allweddol 31 00:01:56,390 --> 00:02:00,800 bod y defnyddiwr a basiwyd mewn, a sicrhau bod pob cymeriad yn yr wyddor 32 00:02:00,800 --> 00:02:02,800 er mwyn parhau. 33 00:02:02,800 --> 00:02:05,560 >> Unwaith y byddwn wedi gwneud hynny, yna rydym yn yn gallu cael y llinyn o'r defnyddiwr, 34 00:02:05,560 --> 00:02:07,560 yn union fel y gwnaethom o'r blaen. 35 00:02:07,560 --> 00:02:10,520 Ac yn awr, yr ydym yn dod i'r galon o'r broblem i vigenere, 36 00:02:10,520 --> 00:02:14,665 sydd yn union fel Cesar, sut i chyfrif i maes y patrwm enciphering 37 00:02:14,665 --> 00:02:19,760 a hafaliad, ac encipher y plaintext cyfan. 38 00:02:19,760 --> 00:02:23,280 >> Felly, byddwch yn sylwi bod y hafaliad ar gyfer y sifft vigenere 39 00:02:23,280 --> 00:02:25,610 yn debyg iawn i'r un a Cesar. 40 00:02:25,610 --> 00:02:29,780 Yr unig wahaniaeth yw bod yn lle k newidyn sengl 41 00:02:29,780 --> 00:02:37,270 o'r blaen, yn awr k mae gan isysgrif, dangos y llythyr jth y allweddol. 42 00:02:37,270 --> 00:02:39,560 >> Gadewch i ni gerdded trwy esiampl. 43 00:02:39,560 --> 00:02:43,830 Dywedwch eich bod yn awyddus i basio yn gyfrinach Neges ar eich mathru, yr wyf yn hoffi i chi. 44 00:02:43,830 --> 00:02:46,325 Wel, ar gyfer eich allwedd chi dewis rhywbeth y mae eich 45 00:02:46,325 --> 00:02:49,790 gwybod malwch yn gwybod yr ydych yn hoffi, pandas. 46 00:02:49,790 --> 00:02:52,290 Mae pob hawl, felly sut ydym ni'n newid hyn? 47 00:02:52,290 --> 00:02:55,500 >> Wel, rydym wedi ein mynegai plaintext. 48 00:02:55,500 --> 00:02:59,160 Dyna yn y llythyr cyntaf a felly yn y mynegai ar gyfer ein allwedd 49 00:02:59,160 --> 00:03:02,830 sydd ar y p, y cyntaf llythyr yn ein gair panda. 50 00:03:02,830 --> 00:03:08,590 Felly, gan symud i mi o dan p yn rhoi i ni x, yna rydym yn hyrwyddo'r mynegai plaintext. 51 00:03:08,590 --> 00:03:10,460 Mae hyn yn ein cael i le. 52 00:03:10,460 --> 00:03:13,540 Yn awr, cymeriad gofod yn ddi wyddor, 53 00:03:13,540 --> 00:03:16,930 fel eu bod yn golygu, mai dim ond trosglwyddiadau i'r dde dros y ciphertext, 54 00:03:16,930 --> 00:03:23,430 rydym yn rhoi lle yno, ac nid ydym yn ei wneud ymlaen llaw y mynegai ar gyfer ein allweddol. 55 00:03:23,430 --> 00:03:25,820 Felly, rydym yn dal i fod yn p ar y pwynt hwn. 56 00:03:25,820 --> 00:03:30,130 >> Rydym yn symud ymlaen i'r nesaf mynegai yn ein plaintext. 57 00:03:30,130 --> 00:03:34,030 Ac yn awr, oherwydd mae hynny'n llythyr, mae'r llythrennau bach l, 58 00:03:34,030 --> 00:03:37,920 rydym yn symud hynny gan y mynegai nesaf yn ein allweddol. 59 00:03:37,920 --> 00:03:42,360 Pa yn, sydd yn sero sifft fel mai dim ond yn dod yn 60 00:03:42,360 --> 00:03:44,370 yn l yn ein ciphertext. 61 00:03:44,370 --> 00:03:51,120 Yna, rydym yn symud ymlaen y plaintext, ac mynegai allweddol am ei fod yn wyddor. 62 00:03:51,120 --> 00:03:56,210 Felly, yna rydym yn parhau bod nes i ni gyrraedd y e yn debyg. 63 00:03:56,210 --> 00:04:01,090 >> Mae pob hawl, felly byddwch yn sylwi ar hyn bwyntio hynny, o ran ein mynegai allweddol, 64 00:04:01,090 --> 00:04:03,940 rydym wedi cyrraedd diwedd y gair panda, felly beth 65 00:04:03,940 --> 00:04:08,750 digwydd pan gawn i'r nesaf llythyr yr wyddor yn y plaintext? 66 00:04:08,750 --> 00:04:12,180 Wel, cyfan sy'n digwydd yw ein cofleidiol i'r dechrau, 67 00:04:12,180 --> 00:04:14,710 at y mynegai cyntaf o'n allweddol. 68 00:04:14,710 --> 00:04:19,570 Felly, yna rydym yn symud y y gan p i roi i ni n. 69 00:04:19,570 --> 00:04:26,860 Ac yna, rydym yn parhau gorffen amgodio ein plaintext i gael Noh x lvne. 70 00:04:26,860 --> 00:04:29,300 >> O'r enghraifft hon, yr wyf yn Dangosodd ein bod ond ymlaen llaw 71 00:04:29,300 --> 00:04:33,140 i'r llythyr nesaf yn y gair allweddol os bydd y cymeriad mewn testun plaen 72 00:04:33,140 --> 00:04:37,480 yn llythyr felly mae'r isalpha Bydd swyddogaeth yn dod i mewn 'n hylaw yma. 73 00:04:37,480 --> 00:04:43,030 Ac, yn union fel yn Caesar, rydym am cadw yr achos, isupper a islower. 74 00:04:43,030 --> 00:04:46,100 Felly, ychwanegwch ychydig bach hwn mewn i mewn i'ch pseudocode. 75 00:04:46,100 --> 00:04:48,510 >> Felly sut rydym yn chyfrif i maes y sifftiau allweddol? 76 00:04:48,510 --> 00:04:53,030 Wel, os ydych yn cofio ein trafodaeth ar fynegeion yr wyddor yn y Caesar 77 00:04:53,030 --> 00:04:55,370 broblem, mae'n debyg iawn. 78 00:04:55,370 --> 00:05:01,130 >> Lle A cyfateb i ASCII gwerth o 65 ond newid o 0, 79 00:05:01,130 --> 00:05:03,550 ac yna bydd y llythyr diwethaf yn yr wyddor, Z, 80 00:05:03,550 --> 00:05:06,940 cyfateb i newid o 25. 81 00:05:06,940 --> 00:05:10,320 Byddwch yn sylwi bod y newid yn union yr un fath ai peidio 82 00:05:10,320 --> 00:05:14,880 y llythyr yn achos uchaf neu llythrennau bach. 83 00:05:14,880 --> 00:05:17,700 >> Iawn, felly nawr eich bod yn gwybod sut i chyfrif i maes 84 00:05:17,700 --> 00:05:21,470 y newid rhifiadol sy'n yn cyfateb i gymeriad sengl 85 00:05:21,470 --> 00:05:24,050 gadewch i ni fynd yn ôl at ein hafaliad. 86 00:05:24,050 --> 00:05:28,180 Oherwydd bod gennym ddau wahanol subscripts yma, fi a j, 87 00:05:28,180 --> 00:05:32,130 dyna awgrym ein bod am gadw golwg y ddau ein safle yn y plaintext 88 00:05:32,130 --> 00:05:36,600 yn ogystal â'n safle yn y gair allweddol, felly rheini'n ddau newidyn ar wahân 89 00:05:36,600 --> 00:05:39,010 ein bod am gadw gafael. 90 00:05:39,010 --> 00:05:42,580 >> Yn awr, mae'r sefyllfa yn ein plaintext yn mynd i gynyddu bob tro, 91 00:05:42,580 --> 00:05:45,530 fel eu bod yn mynd i fod yn ychydig mwy syml 92 00:05:45,530 --> 00:05:49,750 yn hytrach na'r sefyllfa yr allweddair, yr ydym yn gwybod wedi i lapio o gwmpas, 93 00:05:49,750 --> 00:05:52,910 ac weithiau cynyddiad, weithiau yn aros yr un fath. 94 00:05:52,910 --> 00:05:55,430 Felly, sut yr ydym yn gweithredu ymarferoldeb 95 00:05:55,430 --> 00:05:59,820 i lapio o amgylch y mynegai ar gyfer y gair allweddol? 96 00:05:59,820 --> 00:06:01,640 >> Rydw i'n mynd i ddefnyddio'r enghraifft cyfrif i ffwrdd. 97 00:06:01,640 --> 00:06:06,100 Cyfrif i ffwrdd yn ffordd boblogaidd i rannu pobl i mewn i grwpiau. 98 00:06:06,100 --> 00:06:10,660 Dweud Roedd gen 5 o bobl ac roeddwn i eisiau rhannu nhw i fyny i dri grŵp, 99 00:06:10,660 --> 00:06:13,640 yn dda yna byddwn yn dechrau drwy gyfrif i ffwrdd. 100 00:06:13,640 --> 00:06:16,980 Y person cyntaf fyddai dweud fy mod i'n rhif un tîm, 101 00:06:16,980 --> 00:06:21,030 byddai'r person nesaf yn cael ei rif tîm dau, y rhif tîm trydydd person 102 00:06:21,030 --> 00:06:21,910 tri. 103 00:06:21,910 --> 00:06:25,910 Yn awr, yr wyf yn unig eisiau dri grŵp felly byddai'r pedwerydd person mewn gwirionedd 104 00:06:25,910 --> 00:06:30,160 yn dechrau ar y dechrau ac yn dweud, yn dda, rwy'n rhif un tîm yn ogystal, 105 00:06:30,160 --> 00:06:32,890 a'r person nesaf fyddai rhif tîm dau. 106 00:06:32,890 --> 00:06:37,660 Ac, oddi yno, gallant wedyn ar wahân yn eu grwpiau. 107 00:06:37,660 --> 00:06:41,130 >> Felly, sut y gallaf ddefnyddio modwlo fy helpu i weithredu 108 00:06:41,130 --> 00:06:44,160 hyn yn cyfrif off cofleidiol swyddogaeth? 109 00:06:44,160 --> 00:06:50,140 Wel, y person cyntaf rhif 1, mod 3 yn rhoi i ni 1. 110 00:06:50,140 --> 00:06:54,690 2 mod 3 yn rhoi i ni 2, a 3 mod 3 yn rhoi i ni 0. 111 00:06:54,690 --> 00:07:02,140 >> Y pedwerydd person, rhif 4, 3 mod yn rhoi 1 ni, ac yna 5 mod 3 yn rhoi 2 inni. 112 00:07:02,140 --> 00:07:05,370 Felly, byddwch yn sylwi bod hyd yn oed er y nifer o bobl sydd gennyf 113 00:07:05,370 --> 00:07:11,210 yn cynyddu, ac yn uwch 3, ers i mi mod yn modding gan 3 114 00:07:11,210 --> 00:07:15,250 Rwyf bob amser yn cael rhifau 0, 1, a 2. 115 00:07:15,250 --> 00:07:19,040 Dwi byth yn cael mwy na 3. 116 00:07:19,040 --> 00:07:22,630 Felly, yna, hyd yn oed os wyf wedi 10 pobl, yna i gyd o'r bobl hynny 117 00:07:22,630 --> 00:07:27,430 yn dal i fod o fewn grwpiau 1, 2, neu 0. 118 00:07:27,430 --> 00:07:33,560 >> Felly, yn awr rydym yn gwybod bod os oes gennym grŵp 5 ac rydym mod bawb o 3, 119 00:07:33,560 --> 00:07:38,180 Yna, rydym yn byth yn mynd i yn fwy na grwpiau 0, 1, neu 2. 120 00:07:38,180 --> 00:07:43,430 Felly, rydym yn byth yn mynd i gael grw ^ p Rhif sy'n hafal i 3 neu uwch. 121 00:07:43,430 --> 00:07:46,980 Felly, hyd yn oed os wyf yn ychwanegu pump yn fwy pobl, yna pob un ohonynt 122 00:07:46,980 --> 00:07:53,150 Byddai dal i gael ei neilltuo i grwpiau 0, 1, 2 neu oherwydd fy mod i'n modding erbyn 3. 123 00:07:53,150 --> 00:07:56,510 Nid wyf erioed i'n mynd i fod yn fwy na hynny cap. 124 00:07:56,510 --> 00:08:00,800 >> Iawn, felly gadewch i ni weld os gallwn wneud cais cysyniad hwn o ddefnyddio modwlo 125 00:08:00,800 --> 00:08:03,710 i lapio o amgylch y niferoedd grwpiau a gwneud cais 126 00:08:03,710 --> 00:08:08,000 iddo i vigenere ble yr ydym am i ddefnyddio modwlo i lapio o gwmpas 127 00:08:08,000 --> 00:08:10,220 y mynegai ar gyfer yr allweddair. 128 00:08:10,220 --> 00:08:12,830 Hyd yn oed er ein bod yn incrementing mynegai rydym bob amser 129 00:08:12,830 --> 00:08:17,260 am wneud yn siŵr ein bod yn bob amser cofleidiol i'r cychwyn cyntaf 130 00:08:17,260 --> 00:08:20,050 byth yn fwy na'r hyd y llinyn. 131 00:08:20,050 --> 00:08:23,510 >> Iawn, felly yr wyf yn gwybod y gallai fod yn ychydig yn llethol. 132 00:08:23,510 --> 00:08:26,670 Mae llawer mwy i'w wneud yn p hwn set. 133 00:08:26,670 --> 00:08:30,050 Felly, gwnewch yn siŵr eich bod yn ysgrifennu allan yn pseudocode da i chi eich hun 134 00:08:30,050 --> 00:08:32,870 eich bod yn deall ac sy'n cael y swydd ei wneud. 135 00:08:32,870 --> 00:08:35,580 Ceisio mynd i'r afael pob llinell sengl yn annibynnol 136 00:08:35,580 --> 00:08:38,370 figuring holl bach darnau bach o'r pos 137 00:08:38,370 --> 00:08:40,260 cyn ei roi at ei gilydd. 138 00:08:40,260 --> 00:08:43,110 >> Gwnewch yn siwr y gallwch ei gael yr allwedd o'r llinell orchymyn 139 00:08:43,110 --> 00:08:46,780 a sicrhau ei fod yn wyddor, cael y testun plaen gan y defnyddiwr, 140 00:08:46,780 --> 00:08:51,010 ac yna yn enciphering, gwnewch yn siŵr eich yn gwybod sut i encipher llythyr unigol, 141 00:08:51,010 --> 00:08:56,130 ac yna symud ymlaen i'r llinyn cyfan gyda phob un o'r cofleidiol swyddogaethau. 142 00:08:56,130 --> 00:08:59,610 Yn olaf, gallwch argraffu'r ciphertext. 143 00:08:59,610 --> 00:09:04,050 >> Fy enw i yw Zamyla, ac roedd hyn yn vigenere. 144 00:09:04,050 --> 00:09:07,757