1 00:00:00,000 --> 00:00:10,103 2 00:00:10,103 --> 00:00:11,270 >> ZAMYLA CHAN: ขอแสดงความยินดี เมื่อจบของคุณ 3 00:00:11,270 --> 00:00:13,200 คู่แรกของโปรแกรม C 4 00:00:13,200 --> 00:00:16,379 ฉันรู้ว่าการโจมตีครั้งแรกของคุณให้เป็น ไวยากรณ์ C สามารถ daunting 5 00:00:16,379 --> 00:00:20,060 แต่ผมยืนยันกับคุณได้ในตอนท้ายของ แน่นอนคุณจะสามารถมองไปที่ 6 00:00:20,060 --> 00:00:23,870 คู่แรกของการมอบหมายงานและ ให้พวกเขาในไม่กี่นาที 7 00:00:23,870 --> 00:00:27,830 >> ตอนนี้ที่คุณได้รับคุ้นเคยมากกว่า กับไวยากรณ์, ขอได้ที่ซีซาร์ 8 00:00:27,830 --> 00:00:31,720 ในซีซาร์ผู้ใช้จะส่ง ที่สำคัญจำนวนเต็มเป็นบรรทัดคำสั่ง 9 00:00:31,720 --> 00:00:35,300 อาร์กิวเมนต์แล้วใส่ธรรมดา ข้อความที่รวดเร็ว 10 00:00:35,300 --> 00:00:38,050 โปรแกรมก็จะเปลี่ยนเป็นรหัส ข้อความและพิมพ์ 11 00:00:38,050 --> 00:00:40,020 ข้อความไซเฟอร์เท็กซ์ของพวกเขา 12 00:00:40,020 --> 00:00:42,980 >> เข้ารหัสสำหรับซีซาร์ ค่อนข้างง่าย 13 00:00:42,980 --> 00:00:46,455 เลื่อนตัวอักษรแต่ละตัวในของพวกเขา ข้อความธรรมดาโดยที่สำคัญ 14 00:00:46,455 --> 00:00:49,220 ผลที่ตามมาก็ยังมี สวยไม่ปลอดภัย 15 00:00:49,220 --> 00:00:53,850 แต่การดำเนินการของซีซาร์จะแนะนำ เรากับข้อมูล ASCIIMath และอาร์เรย์ 16 00:00:53,850 --> 00:00:54,460 โครงสร้าง 17 00:00:54,460 --> 00:00:57,510 เราจะได้รับความซับซ้อนมากขึ้น ยันต์ภายหลัง 18 00:00:57,510 --> 00:01:01,680 กับซีซาร์สำคัญของ 2 ตัวอักษรใน ข้อความธรรมดาจะได้รับการแสดงโดย 19 00:01:01,680 --> 00:01:07,580 C ตัวอักษรใน ciphertext เพราะ C เป็นตัวอักษรสองตัวหลังจาก A. B จะเป็น 20 00:01:07,580 --> 00:01:12,450 แสดงโดย D และ C โดยอีต่อ ในตอนท้ายของตัวอักษร, W คือ 21 00:01:12,450 --> 00:01:18,550 แทนด้วย Y และ X โดย Z. แต่ Y ไม่ได้มีตัวอักษรสองตัวหลังจากที่มันดังนั้น 22 00:01:18,550 --> 00:01:21,070 ยันต์พันรอบตัวอักษร 23 00:01:21,070 --> 00:01:27,190 Y ในข้อความธรรมดาจึงเป็นตัวแทนโดย ใน ciphertext และ Z โดย B. มันอาจ 24 00:01:27,190 --> 00:01:32,080 ช่วยในการดูซีซาร์ศูนย์เช่น ล้อตัวอักษรอย่างต่อเนื่อง 25 00:01:32,080 --> 00:01:35,760 >> หากต้องการเปลี่ยนเป็นรหัสข้อความที่ผู้ใช้ของพวกเขา จะเข้าสู่สองอาร์กิวเมนต์ 26 00:01:35,760 --> 00:01:37,090 เป็นบรรทัดคำสั่ง - 27 00:01:37,090 --> 00:01:40,010 . / ซีซาร์ตามด้วยที่สำคัญ 28 00:01:40,010 --> 00:01:44,710 เช่นเคยเราไม่สามารถไว้วางใจของผู้ใช้ อย่างสมบูรณ์เพื่อป้อนที่ทำให้ 29 00:01:44,710 --> 00:01:45,800 ความรู้สึกสำหรับโปรแกรมของเรา 30 00:01:45,800 --> 00:01:50,670 ดังนั้นเราจะมีการตรวจสอบของพวกเขา ป้อนบรรทัดคำสั่ง 31 00:01:50,670 --> 00:01:57,285 >> แทนการใช้เป็นโมฆะหลัก int เราไม่ ใช้ int หลัก int argc, argv สตริง 32 00:01:57,285 --> 00:02:01,730 argc ตัวแปรจำนวนเต็มแทน จำนวนอาร์กิวเมนต์ที่ผ่านเข้ามา 33 00:02:01,730 --> 00:02:02,880 บรรทัดคำสั่ง 34 00:02:02,880 --> 00:02:09,070 และ argv เป็นอาร์เรย์หรือคิดว่ามันเป็น รายการของอาร์กิวเมนต์ผ่านระบบ 35 00:02:09,070 --> 00:02:12,000 >> ดังนั้นสำหรับซีซาร์ทำอย่างไรเราจะตรวจสอบ การป้อนข้อมูลของผู้ใช้? 36 00:02:12,000 --> 00:02:15,870 ดีที่พวกเขาควรจะเข้ามา สองอาร์กิวเมนต์บรรทัดคำสั่ง - 37 00:02:15,870 --> 00:02:18,150 . / ซีซาร์และที่สำคัญ 38 00:02:18,150 --> 00:02:22,340 ดังนั้นถ้าไม่ได้เป็น argc 2 ว่าหมายความว่า พวกเขาอาจลืมกุญแจและเพียงแค่ 39 00:02:22,340 --> 00:02:27,230 ป้อน. / ซีซาร์หรือพวกเขา เข้ามาหลายคีย์ 40 00:02:27,230 --> 00:02:29,770 >> หากเป็นกรณีนี้แล้วคุณจะ ต้องการพิมพ์คำแนะนำ 41 00:02:29,770 --> 00:02:30,910 และออกจากโปรแกรม 42 00:02:30,910 --> 00:02:34,320 พวกเขาจะต้องลองอีกครั้ง จากบรรทัดคำสั่ง 43 00:02:34,320 --> 00:02:37,430 แต่ถึงแม้ว่า argc เป็น 2 คุณจะ จำเป็นต้องตรวจสอบว่าพวกเขา 44 00:02:37,430 --> 00:02:39,100 ให้คุณคีย์ที่ถูกต้อง 45 00:02:39,100 --> 00:02:40,730 สำหรับซีซาร์คุณจะต้องเป็นจำนวนเต็ม 46 00:02:40,730 --> 00:02:43,260 แต่ argv เป็นอาร์เรย์ของสตริง 47 00:02:43,260 --> 00:02:46,490 คุณจะเข้าถึงที่สำคัญที่ได้อย่างไร 48 00:02:46,490 --> 00:02:47,850 >> ดูอย่างรวดเร็วที่อาร์เรย์ - 49 00:02:47,850 --> 00:02:51,410 โครงสร้างข้อมูลที่ถือหลาย ค่าของชนิดข้อมูลเดียวกัน 50 00:02:51,410 --> 00:02:55,350 คอมเมนต์เป็นศูนย์จัดทำดัชนีหมายความว่า องค์ประกอบแรกเป็นศูนย์ดัชนี 51 00:02:55,350 --> 00:03:00,260 และสุดท้ายคือองค์ประกอบที่มีขนาดดัชนี ลบ 1 ที่ขนาดคือจำนวนของ 52 00:03:00,260 --> 00:03:02,850 องค์ประกอบในอาร์เรย์ 53 00:03:02,850 --> 00:03:07,380 >> ถ้าผมประกาศให้เป็นสตริงกล่องจดหมายใหม่อาร์เรย์ ความยาว 3, สายตามัน 54 00:03:07,380 --> 00:03:08,570 ลักษณะเช่นนี้ 55 00:03:08,570 --> 00:03:11,520 สามภาชนะบรรจุสตริง เคียงข้าง 56 00:03:11,520 --> 00:03:15,445 ในการเข้าถึงองค์ประกอบใด ๆ ที่คุณพิมพ์ชื่อ ของอาร์เรย์แล้วระบุ 57 00:03:15,445 --> 00:03:18,080 ดัชนีในวงเล็บ 58 00:03:18,080 --> 00:03:21,610 นี่ฉันกำหนดค่าให้กับแต่ละ องค์ประกอบเช่นเดียวกับที่ฉันจะทำอย่างไรกับการใด ๆ 59 00:03:21,610 --> 00:03:24,310 ตัวแปรสตริงอื่น ๆ 60 00:03:24,310 --> 00:03:29,020 >> ดังนั้นในการเข้าถึงอาร์กิวเมนต์บรรทัดคำสั่งของเรา ทั้งหมดที่เราต้องทำคือการเข้าถึง 61 00:03:29,020 --> 00:03:31,690 องค์ประกอบทางด้านขวาของอาร์เรย์ argv 62 00:03:31,690 --> 00:03:37,360 ถ้าผู้ใช้ป้อนทีม. Blastoff / จรวดเข้าไปในอาคารที่จะ argv 0 63 00:03:37,360 --> 00:03:38,950 เป็น. / Blastoff 64 00:03:38,950 --> 00:03:45,010 argv จะเป็นทีมและ arg2 จะเป็นจรวด 65 00:03:45,010 --> 00:03:47,670 >> ตอนนี้ที่เราสามารถเข้าถึงสำคัญของเรา, เรายังคงต้องให้ 66 00:03:47,670 --> 00:03:49,040 แน่ใจว่ามันถูกต้อง 67 00:03:49,040 --> 00:03:51,060 เราจำเป็นต้องแปลงเป็นจำนวนเต็ม 68 00:03:51,060 --> 00:03:54,680 แต่เราไม่สามารถโยนเช่นเดียวกับ ที่เราเคยทำก่อนหน้านี้ 69 00:03:54,680 --> 00:03:58,800 โชคดีกับการทำงาน Y ดูแล นี้สำหรับเราและแม้กระทั่งกลับ 0 70 00:03:58,800 --> 00:04:02,110 ถ้าสตริงไม่สามารถแปลง เป็นจำนวนเต็ม 71 00:04:02,110 --> 00:04:04,450 มันขึ้นอยู่กับคุณ แต่เพื่อที่จะบอก ผู้ใช้ทำไมคุณจะไม่ 72 00:04:04,450 --> 00:04:06,220 ให้โปรแกรมดำเนินการต่อไป 73 00:04:06,220 --> 00:04:10,710 ผลจากการจัดเก็บเป็น Y ใน จำนวนเต็มและมีคุณมีคีย์ของคุณ 74 00:04:10,710 --> 00:04:12,070 ส่วนถัดไปเป็นเรื่องง่าย 75 00:04:12,070 --> 00:04:15,940 แจ้งให้ผู้ใช้สำหรับข้อความธรรมดาของพวกเขา, ซึ่งจะเป็นของสตริงชนิดข้อมูล 76 00:04:15,940 --> 00:04:18,339 โชคดีสำหรับเราทั้งหมดของผู้ใช้ป้อน สตริงที่ถูกต้อง 77 00:04:18,339 --> 00:04:21,170 78 00:04:21,170 --> 00:04:24,760 >> ตอนนี้เรามีป้อนข้อมูลทั้งหมดที่จำเป็น จากผู้ใช้ก็ถึงเวลาที่เราจะ 79 00:04:24,760 --> 00:04:26,520 เปลี่ยนเป็นรหัสข้อความของพวกเขา 80 00:04:26,520 --> 00:04:29,200 แนวคิดของซีซาร์เป็นเรื่องง่าย พอที่จะเข้าใจ 81 00:04:29,200 --> 00:04:33,750 แต่เครื่องคอมพิวเตอร์ของคุณวิธีการที่ไม่ทราบว่า จดหมายมาหนึ่งหลังจากที่อื่นได้หรือไม่ 82 00:04:33,750 --> 00:04:36,100 >> ในที่นี้ตาราง ASCII มา 83 00:04:36,100 --> 00:04:39,420 ตัวละครทุกตัวมีจำนวนเต็ม จำนวนที่เกี่ยวข้องกับมัน 84 00:04:39,420 --> 00:04:41,380 ทุนคือ 65 85 00:04:41,380 --> 00:04:43,310 ทุน B เป็น 66 86 00:04:43,310 --> 00:04:45,260 ตัวพิมพ์เล็กเป็น 97 87 00:04:45,260 --> 00:04:47,590 b ตัวพิมพ์เล็กเป็น 98 88 00:04:47,590 --> 00:04:50,770 แต่ตัวอักษรไม่ จำกัด เพียงแค่ตัวเลขตัวอักษร 89 00:04:50,770 --> 00:04:56,020 ตัวอย่างเช่นสัญลักษณ์ @ 64 จำนวน ASCII เป็น 90 00:04:56,020 --> 00:04:59,690 >> ก่อนที่จะจัดการกับสตริงทั้ง, ให้แกล้งเราก็ต้องเปลี่ยน 91 00:04:59,690 --> 00:05:01,220 ตัวละครตัวหนึ่ง 92 00:05:01,220 --> 00:05:04,640 ดีเราเพียงต้องการที่จะเปลี่ยนที่เกิดขึ้นจริง ตัวอักษรในข้อความธรรมดาไม่ได้ 93 00:05:04,640 --> 00:05:06,020 ตัวอักษรหรือตัวเลข 94 00:05:06,020 --> 00:05:09,100 ดังนั้นสิ่งแรกที่เราจะต้องการ ตรวจสอบว่าเป็นตัวละครที่อยู่ใน 95 00:05:09,100 --> 00:05:10,430 ตัวอักษร 96 00:05:10,430 --> 00:05:14,460 >> isalpha ฟังก์ชั่นไม่นี้สำหรับ เราและผลตอบแทนแบบบูล - 97 00:05:14,460 --> 00:05:18,570 จริงถ้าตัวอักษรที่เป็นตัวอักษร, เท็จถ้าเป็นอย่างอื่น 98 00:05:18,570 --> 00:05:22,270 สองฟังก์ชันที่มีประโยชน์อื่น ๆ isupper และ islower ด้วย 99 00:05:22,270 --> 00:05:23,860 ชื่ออธิบายตนเอง 100 00:05:23,860 --> 00:05:27,370 พวกเขากลับจริงถ้าตัวอักษรที่กำหนด เป็นตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็ก, 101 00:05:27,370 --> 00:05:28,740 ตามลำดับ 102 00:05:28,740 --> 00:05:33,770 เนื่องจากพวกเขาเป็นบูลีนที่พวกเขากำลัง มีประโยชน์ในการใช้เป็นเงื่อนไข 103 00:05:33,770 --> 00:05:38,310 >> ถ้า isalpha ผลตอบแทนจริงคุณจะต้อง ที่จะเปลี่ยนโดยตัวอักษรที่สำคัญ 104 00:05:38,310 --> 00:05:43,750 ดังนั้นขอเปิด ASCIIMath และทำบางคณิตศาสตร์ ASCII 105 00:05:43,750 --> 00:05:48,700 การใช้งานจะคล้ายกับการใช้งาน สำหรับซีซาร์และใช้เวลาในกุญแจสำคัญที่ 106 00:05:48,700 --> 00:05:50,870 บรรทัดคำสั่ง 107 00:05:50,870 --> 00:05:59,590 >> หากฉันใช้ ASCIIMath 5 ดูเหมือนว่าจะเพิ่ม 5 ถึงให้ฉันฉจดหมายและ 108 00:05:59,590 --> 00:06:01,260 แสดงค่า ASCII 109 00:06:01,260 --> 00:06:04,090 ดังนั้นลองมาดูที่โปรแกรม 110 00:06:04,090 --> 00:06:11,820 >> คุณอาจสงสัยว่าที่นี่ทำไม ตัวอักษรเป็นจำนวนเต็มเมื่อมัน 111 00:06:11,820 --> 00:06:14,330 อย่างเห็นได้ชัดทั้งตัวอักษร 112 00:06:14,330 --> 00:06:17,690 แต่กลับกลายเป็นว่าตัวอักษรและ จำนวนเต็มสามารถใช้แทนกัน 113 00:06:17,690 --> 00:06:21,730 โดยการใส่ตัวอักษรในหนึ่งเดียว เครื่องหมายคำพูดจำนวนเต็มสามารถเก็บ 114 00:06:21,730 --> 00:06:25,390 ค่า ASCII ของเงินทุน A. ระวังแม้ว่า 115 00:06:25,390 --> 00:06:27,150 คุณจำเป็นต้องมีเสื้อผ้าเดียว 116 00:06:27,150 --> 00:06:31,260 โดยไม่ใส่เครื่องหมายคำพูดเดียว, คอมไพเลอร์จะมองหาตัวแปร 117 00:06:31,260 --> 00:06:35,510 ชื่อและตัวอักษรไม่ได้ 118 00:06:35,510 --> 00:06:42,140 >> แล้วฉันจะเพิ่มตัวอักษรและที่สำคัญการจัดเก็บ ผลรวมในผลตัวแปร int 119 00:06:42,140 --> 00:06:47,740 ถึงแม้ว่าผลจะมีชนิดของข้อมูล จำนวนเต็มคำสั่ง printf ฉันใช้ 120 00:06:47,740 --> 00:06:50,370 ตัวยึด% c สำหรับตัวอักษร 121 00:06:50,370 --> 00:06:54,530 ดังนั้นโปรแกรมจะพิมพ์ตัวอักษร ที่เกี่ยวข้องกับผลจำนวนเต็ม 122 00:06:54,530 --> 00:07:00,400 และตั้งแต่ที่เราพิมพ์จำนวนเต็ม รูปแบบเช่นกันโดยใช้% d เราจะเห็น 123 00:07:00,400 --> 00:07:02,110 จำนวนเช่นกัน 124 00:07:02,110 --> 00:07:04,450 ดังนั้นตอนนี้คุณจะเห็นว่าเรา รักษาตัวอักษรและ 125 00:07:04,450 --> 00:07:06,980 จำนวนเต็มและโอละพ่อ 126 00:07:06,980 --> 00:07:12,205 >> ลองทดสอบออก ASCIIMath ไม่กี่ ครั้งเพิ่มขึ้นโดยใช้ 25 เป็นคีย์ 127 00:07:12,205 --> 00:07:15,510 128 00:07:15,510 --> 00:07:17,090 เราได้รับจดหมาย z 129 00:07:17,090 --> 00:07:19,750 ตอนนี้เราพยายามที่ 26 130 00:07:19,750 --> 00:07:25,600 เราต้องการที่จะได้รับจดหมายฉบับหนึ่ง แต่ แทนเราได้รับวงเล็บซ้าย 131 00:07:25,600 --> 00:07:29,490 ดังนั้นเห็นได้ชัดเพียงการเพิ่ม กุญแจสำคัญในการตัวอักษรจะไม่ทำ 132 00:07:29,490 --> 00:07:32,780 เราต้องคิดออกสูตรการห่อ รอบตัวอักษรเหมือนของเรา 133 00:07:32,780 --> 00:07:34,570 ตัวอย่างเช่นในการเริ่มต้นทำ 134 00:07:34,570 --> 00:07:38,520 >> สูตรของซีซาร์ การเปลี่ยนแปลงมีดังนี้ 135 00:07:38,520 --> 00:07:42,750 คเท่ากับพีพลัส K แบบโมดูโล 26 136 00:07:42,750 --> 00:07:46,040 โปรดจำไว้ว่าแบบโมดูโลเป็นประโยชน์ การดำเนินงานที่ทำให้เรามีส่วนที่เหลือ 137 00:07:46,040 --> 00:07:49,880 การแบ่งจำนวนหนึ่งโดยอื่น ๆ 138 00:07:49,880 --> 00:07:54,870 ลองใช้สูตรนี้ธรรมดา ตัวอักษรข้อความที่มีสำคัญของ 2 139 00:07:54,870 --> 00:08:01,810 ค่า ASCII ของ y คือ 89 ซึ่ง ทำให้เรามี 91 แบบโมดูโล 26, 140 00:08:01,810 --> 00:08:03,690 ซึ่งเท่ากับ 13 - 141 00:08:03,690 --> 00:08:08,740 ไม่แน่นอนค่า ASCII ของซึ่งเป็น 67 142 00:08:08,740 --> 00:08:12,810 >> อารมณ์ขันฉันตอนนี้และย้ายออกจาก ค่า ASCII ที่ดัชนีเรียงตามตัวอักษร 143 00:08:12,810 --> 00:08:18,690 ที่เป็นศูนย์และ Z คือ 25, หมายความว่า Y คือ 24 144 00:08:18,690 --> 00:08:25,830 24 บวก 2, 6 แบบโมดูโลทำให้เรามี 26, โมดูโล 26, 0 ซึ่งเป็น 145 00:08:25,830 --> 00:08:28,170 ดัชนีตามตัวอักษร 146 00:08:28,170 --> 00:08:32,980 ดังนั้นสูตรนี้ดูเหมือนว่าจะนำไปใช้กับ ดัชนีตามตัวอักษรของตัวอักษรและ 147 00:08:32,980 --> 00:08:34,960 ไม่ได้ค่า ASCII ของ 148 00:08:34,960 --> 00:08:37,630 >> แต่คุณเริ่มต้นด้วยค่า ASCII 149 00:08:37,630 --> 00:08:41,650 และในการพิมพ์ตัวอักษรไซเฟอร์เท็กซ์ คุณจะต้องค่า ASCII ของตนเช่นกัน 150 00:08:41,650 --> 00:08:46,400 มันขึ้นอยู่กับคุณแล้วที่จะคิดออก วิธีการสลับไปมา 151 00:08:46,400 --> 00:08:49,850 >> เมื่อคุณคิดออกสูตรที่เหมาะสม สำหรับตัวละครตัวหนึ่งทั้งหมดที่คุณต้องทำ 152 00:08:49,850 --> 00:08:53,520 มีการใช้สูตรเดียวกันทุก ตัวอักษรในข้อความธรรมดา - 153 00:08:53,520 --> 00:08:57,720 เฉพาะในกรณีที่ตัวอักษรที่เป็นตัวอักษร แน่นอน 154 00:08:57,720 --> 00:09:02,360 และจำไว้ว่าคุณจำเป็นที่จะต้องรักษา กรณีที่บนหรือล่างที่ที่ 155 00:09:02,360 --> 00:09:06,890 isUpper และฟังก์ชั่ isLower กล่าวก่อนหน้านี้จะมาในสะดวก 156 00:09:06,890 --> 00:09:08,830 คุณอาจมีสองสูตร - 157 00:09:08,830 --> 00:09:11,680 หนึ่งสำหรับตัวอักษรพิมพ์ใหญ่ และสำหรับตัวพิมพ์เล็ก 158 00:09:11,680 --> 00:09:18,420 ดังนั้น isUpper isLower จะช่วยให้คุณ กำหนดสูตรที่จะใช้ 159 00:09:18,420 --> 00:09:22,460 >> คุณไม่ใช้สูตรของคุณวิธีการทุก ตัวเดียวในสตริง? 160 00:09:22,460 --> 00:09:25,910 ดีสตริงเป็นเพียง อาร์เรย์ของตัวอักษร 161 00:09:25,910 --> 00:09:31,150 เพื่อให้คุณสามารถเข้าถึงตัวละครแต่ละตัวโดย การจัดกลุ่มกว่าตัวละครในทุก 162 00:09:31,150 --> 00:09:33,450 สตริงในสำหรับวง 163 00:09:33,450 --> 00:09:37,550 สำหรับสภาพของคุณสำหรับวง, ฟังก์ชัน strlen สำหรับสตริง 164 00:09:37,550 --> 00:09:39,280 ความยาวจะมาในสะดวก 165 00:09:39,280 --> 00:09:44,020 มันต้องใช้เวลาในสตริงเป็น input และ ผลตอบแทนที่ได้ความยาวของสตริงที่ 166 00:09:44,020 --> 00:09:49,250 ให้แน่ใจว่าจะรวมถึงห้องสมุดขวา ที่จะใช้ฟังก์ชั่นความยาวสตริง 167 00:09:49,250 --> 00:09:51,790 >> และมีคุณมีของคุณ ciphertext 168 00:09:51,790 --> 00:09:53,260 ชื่อของฉันคือ Zamyla 169 00:09:53,260 --> 00:09:54,510 และ [รหัสการพูด] 170 00:09:54,510 --> 00:10:02,944