1 00:00:00,000 --> 00:00:11,980 2 00:00:11,980 --> 00:00:16,980 >> ROB: สวัสดีครับผมร็อบและให้ถอดรหัส โปรแกรม Vigenere 3 00:00:16,980 --> 00:00:21,180 ดังนั้นสิ่งแรกที่เราต้องทำคือการให้ แน่ใจว่าผู้ใช้ป้อนสิ่งที่เราคาดหวัง 4 00:00:21,180 --> 00:00:23,240 พวกเขาไปที่บรรทัดคำสั่ง 5 00:00:23,240 --> 00:00:28,720 ดังนั้นถ้า argc ไม่ได้เป็น 2 นั่นหมายความว่าอย่างใดอย่างหนึ่ง ผู้ใช้ไม่ได้ป้อนสตริงเรา 6 00:00:28,720 --> 00:00:31,780 ต้องการที่จะใช้เป็นเข้ารหัสของเรา สตริงหรือพวกเขา 7 00:00:31,780 --> 00:00:32,890 ป้อนสิ่งที่มากเกินไป 8 00:00:32,890 --> 00:00:35,130 และเราไม่ทราบว่าจะทำอย่างไร กับสิ่งอื่น ๆ เหล่านั้น 9 00:00:35,130 --> 00:00:37,960 >> ดังนั้นเราจึงบอกพวกเขาสิ่งที่พวกเขา ควรจะได้เข้ามา 10 00:00:37,960 --> 00:00:39,300 และเรากลับ 11 00:00:39,300 --> 00:00:44,570 ตอนนี้สมมติว่า argc คือ 2, ที่เราสามารถทำได้ ดำเนินการต่อกับส่วนที่เหลือของโปรแกรม 12 00:00:44,570 --> 00:00:47,890 >> เรานามแฝงชื่อ argv [1] 13 00:00:47,890 --> 00:00:49,750 เป็นตัวแปรหลัก 14 00:00:49,750 --> 00:00:51,860 เพื่อที่เราจะได้ไม่ต้อง ใช้ชื่อ argv [1] 15 00:00:51,860 --> 00:00:53,050 ตลอดเวลาที่เหลือของโปรแกรม 16 00:00:53,050 --> 00:00:55,570 และบางทีเราจะลืมสิ่งที่ นั่นหมายความว่าและอื่น ๆ 17 00:00:55,570 --> 00:00:57,830 คำหลักที่เป็นชื่อที่ดีกว่ามาก 18 00:00:57,830 --> 00:01:01,982 ทันทีและเราจะคว้าความยาว ของคำหลักของเราที่นี่ 19 00:01:01,982 --> 00:01:07,460 >> ตกลงดังนั้นตอนนี้เราต้องการที่จะตรวจสอบว่า คำหลักของเราเป็นจริงที่ถูกต้อง 20 00:01:07,460 --> 00:01:11,250 คำหลักที่เราใช้ในการเข้ารหัสสตริง ก็ควรจะเป็นตัวอักษร 21 00:01:11,250 --> 00:01:12,400 ตัวอักษร 22 00:01:12,400 --> 00:01:16,830 ถ้าผู้ใช้ป้อนตัวอักษรที่ไม่- ตัวละครที่เราควรจะพูดคำหลัก 23 00:01:16,830 --> 00:01:20,170 ต้องมีเพียงผ่าน Z และการกลับมาแล้ว 24 00:01:20,170 --> 00:01:24,370 ดังนั้นสำหรับการคำนวณซ้ำวนไปทั่ว ตัวอักษรของคำหลักของเราในการตรวจสอบ 25 00:01:24,370 --> 00:01:31,870 ว่าหากไม่ได้เป็นตัวอักษรแล้ว เราต้องพิมพ์คำเตือนว่า 26 00:01:31,870 --> 00:01:36,285 >> ตอนนี้เมื่อเราได้รับมาถึงจุดนี้เรารู้ว่า ที่สตริงจะต้องถูกต้อง 27 00:01:36,285 --> 00:01:38,230 คำหลักที่จะต้องถูกต้อง 28 00:01:38,230 --> 00:01:40,880 และตอนนี้เราต้องการที่จะได้รับข้อความจาก ผู้ใช้ที่พวกเขาต้องการให้เรา 29 00:01:40,880 --> 00:01:43,910 เข้ารหัสด้วยวลีที่สำคัญที่ 30 00:01:43,910 --> 00:01:46,780 เพื่อที่จะได้รับข้อความที่เรามี ทำในขณะที่วงที่จะ 31 00:01:46,780 --> 00:01:52,650 อย่างต่อเนื่องได้รับสายจากผู้ใช้ จนกว่าพวกเขาจะใส่ชุดตัวอักษรที่ถูกต้อง 32 00:01:52,650 --> 00:01:58,690 >> อย่างต่อเนื่องที่เราเห็นที่นี่ตัวแปรนี้ int nun_letters_seen 33 00:01:58,690 --> 00:02:01,300 เราจะเห็นว่าทำไมเราต้อง ว่าในครั้งที่สอง 34 00:02:01,300 --> 00:02:07,320 แต่สำหรับวงนี้จะไปย้ำ จาก i = 0 ตลอดทางขึ้นไปยังฉัน 35 00:02:07,320 --> 00:02:10,940 เท่ากับ n ซึ่งหมายความว่าเรากำลัง iterating กว่าเป็นไปได้ทั้งหมด 36 00:02:10,940 --> 00:02:13,020 ตัวอักษรในข้อความของเรา 37 00:02:13,020 --> 00:02:17,370 เพราะเราต้องการที่จะเข้ารหัสทั้งหมดของ ตัวอักษรในข้อความของเรา 38 00:02:17,370 --> 00:02:22,970 เพื่อแจ้งให้ทราบที่เราทำถ้า (isalphamessage [I] เพราะเราไม่ต้องการที่จะเข้ารหัส 39 00:02:22,970 --> 00:02:25,660 ตัวละครที่ไม่ได้เรียงตามตัวอักษร 40 00:02:25,660 --> 00:02:28,810 หากมีสัญลักษณ์ช่องว่าง หรือตัวเลขที่เราทำไม่ได้ 41 00:02:28,810 --> 00:02:30,730 ต้องการเข้ารหัสที่ 42 00:02:30,730 --> 00:02:37,220 >> ตอนนี้สมมติว่ามันเป็นตัวอักษร ครั้งแรกที่เราต้องการที่จะคิดออกสิ่งที่เรา 43 00:02:37,220 --> 00:02:40,890 จริงต้องการการเข้ารหัส ข้อความโดยใช้ 44 00:02:40,890 --> 00:02:42,710 ดังนั้นสิ่งที่ฉันหมายความโดยที่? 45 00:02:42,710 --> 00:02:46,740 >> สมมติว่าวลีที่สำคัญ ผู้ใช้ป้อนเป็น abc 46 00:02:46,740 --> 00:02:49,070 นั่นคือสิ่งที่เรากำลังใช้ในการเข้ารหัส 47 00:02:49,070 --> 00:02:54,850 ตอนนี้อย่างไร้เดียงสาที่เราคิดว่านั่นหมายความว่า เราต้องการที่จะเข้ารหัสตัวอักษรตัวแรก 48 00:02:54,850 --> 00:02:59,740 ข้อความของเราโดย 0 หมายถึงตั้งแต่ หมุนตัวโดย 0 49 00:02:59,740 --> 00:03:04,395 >> เราต้องการที่จะเข้ารหัสอักขระตัวที่สอง 1 ตัวที่สามด้วย 2 50 00:03:04,395 --> 00:03:09,170 ตัวละครที่สี่โดย 0 ห้า โดยที่ 1 ที่หกโดย 2 และอื่น ๆ 51 00:03:09,170 --> 00:03:14,440 แต่จำไว้ว่าเราต้องการที่จะข้าม ช่องว่างและสัญลักษณ์และตัวเลข 52 00:03:14,440 --> 00:03:21,520 ซึ่งหมายความว่าหากผู้ใช้เข้ามา hello โลกเป็นข้อความ 53 00:03:21,520 --> 00:03:26,590 ว่าพวกเขาต้องการที่จะเข้ารหัสแล้ว เราต้องการที่จะเข้ารหัสชั่วโมงโดย 0 54 00:03:26,590 --> 00:03:32,680 สอดคล้องกับการส่งอีเมล์โดยที่ 1 ลิตรโดย 2 ลิตรโดย 0, o 1 55 00:03:32,680 --> 00:03:41,050 เราต้องการที่จะข้ามพื้นที่ที่มีการเข้ารหัส กว้าง 2, o โดย 0, 1, 2, 0 56 00:03:41,050 --> 00:03:45,250 เพื่อแจ้งให้ทราบว่าเราไม่ได้ข้าม พื้นที่แล้วเราจะได้รับการเข้ารหัส 57 00:03:45,250 --> 00:03:51,240 กว้างโดย 0 และจบลงด้วย สตริงที่ไม่ถูกต้อง 58 00:03:51,240 --> 00:03:57,470 >> ตกลงนี้คือสิ่งที่เราต้องมีตัวแปร num_letters_seen เพื่อ 59 00:03:57,470 --> 00:04:04,450 ถ้าเราเพียงแค่จะใช้ในการเข้ารหัส วิธีนี้ที่ไม่ได้ข้าม 60 00:04:04,450 --> 00:04:09,860 สัญลักษณ์ช่องว่างและตัวเลขแล้วเรา ก็สามารถใช้ตัวแปร i เป็นสิ่งที่ 61 00:04:09,860 --> 00:04:12,540 ดัชนีลงไปในวลีที่สำคัญของเราด้วย 62 00:04:12,540 --> 00:04:17,620 เราจำเป็นต้องใช้เพื่อให้ num_letters_seen ติดตามสถานที่จริงใน 63 00:04:17,620 --> 00:04:21,146 วลีที่สำคัญที่เราต้องการทำดัชนี 64 00:04:21,146 --> 00:04:32,240 ดังนั้นที่นี่หากคำหลักที่เรามีถ้า num_letter_seen keyword_length mod ดังนั้น 65 00:04:32,240 --> 00:04:34,570 ทำไมเราต้องพอควร โดยความยาวของคำหลัก? 66 00:04:34,570 --> 00:04:36,630 >> ดีโลก hello เป็นตัวอย่างที่ดี 67 00:04:36,630 --> 00:04:42,310 หากคำหลักเป็น abc แล้วเราต้อง ในการเข้ารหัสอย่างต่อเนื่องโดยจากนั้นข 68 00:04:42,310 --> 00:04:45,740 แล้วคแล้วห่อกลับไปรอบ ๆ , ข, ค,, B, C 69 00:04:45,740 --> 00:04:50,110 ดังนั้นเราจึงจำเป็นในการพอควรตามความยาวของคำหลัก เพื่อที่จะตัดกลับไปรอบ ๆ 70 00:04:50,110 --> 00:04:57,280 >> ดังนั้นถ้านี้เป็นอักษรตัวพิมพ์ใหญ่, แล้วเราต้องการที่จะเข้ารหัสโดย 71 00:04:57,280 --> 00:05:01,450 ตำแหน่งของตัวอักษรในตัวอักษรที่ ที่เราได้รับโดยเพียงแค่ 72 00:05:01,450 --> 00:05:06,730 ลบออกทุนเอและ ในทำนองเดียวกันสำหรับตัวอักษรตัวพิมพ์เล็กเรา 73 00:05:06,730 --> 00:05:13,000 จะได้รับที่สำคัญที่เราต้องการด้วย ลบออกตัวพิมพ์เล็ก 74 00:05:13,000 --> 00:05:16,910 ดังนั้นไม่ว่าจะเป็นตัวอักษร ในวลีที่สำคัญเป็นเมืองหลวงหรือ 75 00:05:16,910 --> 00:05:21,640 อักษรตัวพิมพ์เล็กเรากำลังจะ เข้ารหัสด้วยจำนวนเดียวกัน 76 00:05:21,640 --> 00:05:28,680 >> ตอนนี้เรามีหลักของเราเราดูที่นี่ ว่าถ้าข้อความที่ฉันเป็นตัวพิมพ์ใหญ่ 77 00:05:28,680 --> 00:05:32,660 ตัวละครแล้วเราต้องการที่จะคำนวณ ตำแหน่งในตัวอักษรที่ 78 00:05:32,660 --> 00:05:39,460 ตัวละครเพิ่มที่สำคัญของเราไปห่อกลับ รอบเพื่อที่ว่าถ้าเราเดินผ่านมา 79 00:05:39,460 --> 00:05:43,170 ซีเรากลับไป, ข, คไปและอื่น ๆ 80 00:05:43,170 --> 00:05:49,070 แล้วในที่สุดกลับเพิ่มทุน A. ดังนั้น เราเปลี่ยนกลับเข้ามา [? ascii?] 81 00:05:49,070 --> 00:05:52,010 ช่วงของตัวละครเหล่านี้แทน ตำแหน่งตัวเลขในตัวอักษร 82 00:05:52,010 --> 00:05:53,540 ของตัวละครเหล่านี้ 83 00:05:53,540 --> 00:05:56,610 >> และเราทำในสิ่งที่เหมือนกันสำหรับ ตัวอักษรกรณีที่ต่ำกว่า 84 00:05:56,610 --> 00:06:00,070 ยกเว้นเราต้องการที่จะลบออกตัวพิมพ์เล็ก และเพิ่มกลับไปใน 85 00:06:00,070 --> 00:06:02,900 สิ้นสุดพิมพ์เล็ก 86 00:06:02,900 --> 00:06:08,120 ขอให้สังเกต num_letter_seen ที่เป็นเพียง เพิ่มขึ้นถ้าข้อความผม 87 00:06:08,120 --> 00:06:09,640 ตามตัวอักษร 88 00:06:09,640 --> 00:06:15,790 นี่คือวิธีการที่เราข้ามช่องว่างสัญลักษณ์และ ตัวเลขในวลีที่สำคัญของเราตั้งแต่ 89 00:06:15,790 --> 00:06:20,520 num_letter_seen คือสิ่งที่เรากำลังใช้ ดัชนีเป็นคำหลักของเรา 90 00:06:20,520 --> 00:06:24,540 >> ในที่สุดในที่สุดตอนนี้ข้อความที่ ฉันได้รับการเข้ารหัสเรา 91 00:06:24,540 --> 00:06:26,280 พิมพ์ข้อความฉัน 92 00:06:26,280 --> 00:06:27,890 และที่มัน 93 00:06:27,890 --> 00:06:28,670 ชื่อของฉันคือร็อบ 94 00:06:28,670 --> 00:06:31,020 และนี่คือ Vigenere 95 00:06:31,020 --> 00:06:32,850 >> [เล่นดนตรี] 96 00:06:32,850 --> 00:06:36,651