1 00:00:00,000 --> 00:00:11,980 2 00:00:11,980 --> 00:00:16,980 >> ROB: Xin chào, tôi Rob, và chúng ta hãy giải mã chương trình Vigenere. 3 00:00:16,980 --> 00:00:21,180 Điều đầu tiên nên chúng ta cần phải làm là làm cho chắc chắn người dùng nhập vào những gì chúng ta mong đợi 4 00:00:21,180 --> 00:00:23,240 họ tại dòng lệnh. 5 00:00:23,240 --> 00:00:28,720 Vì vậy, nếu không phải là argc 2 có nghĩa là một trong hai người dùng không nhập vào chuỗi chúng tôi 6 00:00:28,720 --> 00:00:31,780 muốn được sử dụng như mã hóa của chúng tôi chuỗi, hoặc họ 7 00:00:31,780 --> 00:00:32,890 vào quá nhiều thứ. 8 00:00:32,890 --> 00:00:35,130 Và chúng tôi không biết phải làm gì với những thứ khác. 9 00:00:35,130 --> 00:00:37,960 >> Vì vậy, chúng tôi nói với họ những gì họ nên đã nhập. 10 00:00:37,960 --> 00:00:39,300 Và chúng tôi quay trở lại. 11 00:00:39,300 --> 00:00:44,570 Bây giờ, giả định rằng argc là 2, chúng ta có thể tiếp tục với phần còn lại của chương trình. 12 00:00:44,570 --> 00:00:47,890 >> Chúng tôi bí danh tên của argv [1] 13 00:00:47,890 --> 00:00:49,750 vào các từ khóa khác nhau. 14 00:00:49,750 --> 00:00:51,860 Vì vậy, chúng ta không cần phải sử dụng tên argv [1] 15 00:00:51,860 --> 00:00:53,050 suốt phần còn lại của chương trình. 16 00:00:53,050 --> 00:00:55,570 Và có lẽ chúng ta sẽ quên đi những gì điều đó có nghĩa và như vậy. 17 00:00:55,570 --> 00:00:57,830 Từ khóa là một cái tên rất đẹp. 18 00:00:57,830 --> 00:01:01,982 Và chúng tôi sẽ ngay lập tức lấy chiều dài của từ khóa của chúng tôi ngay tại đây. 19 00:01:01,982 --> 00:01:07,460 >> OK, vì vậy bây giờ chúng tôi muốn kiểm tra xem từ khóa của chúng tôi là thực sự có giá trị. 20 00:01:07,460 --> 00:01:11,250 Các từ khóa chúng tôi sử dụng để mã hóa chuỗi chỉ nên được chữ cái 21 00:01:11,250 --> 00:01:12,400 ký tự. 22 00:01:12,400 --> 00:01:16,830 Nếu người dùng nhập vào không theo thứ tự abc ký tự, chúng ta nên nói, từ khóa 23 00:01:16,830 --> 00:01:20,170 chỉ phải chứa từ A đến Z và sau đó quay trở lại. 24 00:01:20,170 --> 00:01:24,370 Vì vậy, điều này cho vòng lặp qua tất cả ký tự của từ khóa của chúng tôi, kiểm tra 25 00:01:24,370 --> 00:01:31,870 rằng nếu một không phải là chữ cái sau đó chúng ta cần phải in cảnh báo đó. 26 00:01:31,870 --> 00:01:36,285 >> Bây giờ, khi chúng tôi có được đến thời điểm này, chúng ta biết rằng chuỗi phải được chính xác. 27 00:01:36,285 --> 00:01:38,230 Các từ khóa phải được chính xác. 28 00:01:38,230 --> 00:01:40,880 Và bây giờ chúng ta cần phải nhận được thông báo từ người dùng rằng họ muốn chúng tôi 29 00:01:40,880 --> 00:01:43,910 mã hóa với cụm từ đó. 30 00:01:43,910 --> 00:01:46,780 Vì vậy, để nhận được tin nhắn đó, chúng tôi có một làm trong khi vòng lặp đó sẽ 31 00:01:46,780 --> 00:01:52,650 liên tục nhận được một chuỗi từ người sử dụng cho đến khi họ nhập vào một chuỗi hợp lệ. 32 00:01:52,650 --> 00:01:58,690 >> Tiếp tục, chúng ta thấy ở đây biến này, int nun_letters_seen. 33 00:01:58,690 --> 00:02:01,300 Chúng ta sẽ thấy lý do tại sao chúng ta cần mà trong một giây. 34 00:02:01,300 --> 00:02:07,320 Nhưng điều này cho vòng lặp sẽ lặp từ tôi bằng 0 tất cả các con đường lên đến tôi 35 00:02:07,320 --> 00:02:10,940 bằng n, có nghĩa là chúng ta đang lặp lại hơn tất cả có thể 36 00:02:10,940 --> 00:02:13,020 ký tự trong tin nhắn của chúng tôi. 37 00:02:13,020 --> 00:02:17,370 Bởi vì chúng tôi muốn mã hóa tất cả các nhân vật trong tin nhắn của chúng tôi. 38 00:02:17,370 --> 00:02:22,970 Vì vậy, chúng tôi nhận thấy làm gì nếu (isalphamessage [I], bởi vì chúng tôi không muốn để mã hóa 39 00:02:22,970 --> 00:02:25,660 nhân vật mà không phải là chữ cái. 40 00:02:25,660 --> 00:02:28,810 Nếu có biểu tượng, không gian, hoặc số, chúng tôi không 41 00:02:28,810 --> 00:02:30,730 muốn mã hóa các. 42 00:02:30,730 --> 00:02:37,220 >> Bây giờ, giả định rằng nó là chữ cái, trước tiên chúng ta muốn tìm ra những gì chúng tôi 43 00:02:37,220 --> 00:02:40,890 thực sự muốn mã hóa các tin nhắn sử dụng. 44 00:02:40,890 --> 00:02:42,710 Vì vậy, tôi có ý nghĩa gì bởi điều đó không? 45 00:02:42,710 --> 00:02:46,740 >> Chúng ta hãy giả định rằng cụm từ khóa người dùng nhập vào là abc. 46 00:02:46,740 --> 00:02:49,070 Đó là những gì chúng tôi đang sử dụng để mã hóa. 47 00:02:49,070 --> 00:02:54,850 Bây giờ, ngây thơ, chúng tôi nghĩ rằng có nghĩa là chúng tôi muốn mã hóa các ký tự đầu tiên 48 00:02:54,850 --> 00:02:59,740 thông điệp của chúng tôi bằng 0, vì một phương tiện quay nhân vật bằng 0. 49 00:02:59,740 --> 00:03:04,395 >> Chúng tôi muốn mã hóa các ký tự thứ hai 1, nhân vật thứ ba 2, 50 00:03:04,395 --> 00:03:09,170 nhân vật thứ tư của 0, thứ năm 1, thứ sáu 2, và như vậy. 51 00:03:09,170 --> 00:03:14,440 Nhưng hãy nhớ rằng chúng ta muốn bỏ qua không gian và các ký hiệu và số. 52 00:03:14,440 --> 00:03:21,520 Điều này có nghĩa rằng nếu người dùng đã nhập vào hello thế giới như thông điệp 53 00:03:21,520 --> 00:03:26,590 rằng họ muốn mã hóa, sau đó chúng tôi muốn để mã hóa h bằng 0 54 00:03:26,590 --> 00:03:32,680 tương ứng với một, e bằng 1, l 2, l bằng 0, o 1. 55 00:03:32,680 --> 00:03:41,050 Chúng tôi muốn bỏ qua không gian, mã hóa w 2, o bằng 0, 1, 2, 0. 56 00:03:41,050 --> 00:03:45,250 Vì vậy, nhận thấy, nếu chúng ta đã không bỏ qua không gian, sau đó chúng ta sẽ được mã hóa 57 00:03:45,250 --> 00:03:51,240 w bằng 0 và kết thúc với chuỗi không chính xác. 58 00:03:51,240 --> 00:03:57,470 >> OK, đây là những gì chúng ta cần biến num_letters_seen cho. 59 00:03:57,470 --> 00:04:04,450 Nếu chúng ta chỉ cần đi để mã hóa sử dụng phương pháp này, mà không bỏ qua 60 00:04:04,450 --> 00:04:09,860 biểu tượng, không gian, và con số, sau đó chúng tôi chỉ có thể sử dụng các biến tôi như những gì 61 00:04:09,860 --> 00:04:12,540 chỉ số vào cụm từ khóa của chúng tôi với. 62 00:04:12,540 --> 00:04:17,620 Chúng ta cần phải sử dụng num_letters_seen để giữ theo dõi những nơi thực tế trong 63 00:04:17,620 --> 00:04:21,146 cụm từ quan trọng mà chúng tôi muốn chỉ số. 64 00:04:21,146 --> 00:04:32,240 Vì vậy, ở đây, nếu từ khóa chúng tôi có, nếu num_letter_seen mod keyword_length, vì vậy 65 00:04:32,240 --> 00:04:34,570 tại sao chúng ta cần phải mod theo chiều dài từ khoá? 66 00:04:34,570 --> 00:04:36,630 >> Vâng, xin chào thế giới là một ví dụ tốt. 67 00:04:36,630 --> 00:04:42,310 Nếu từ khóa là abc, thì chúng ta cần tiếp tục mã hóa bởi một sau đó b 68 00:04:42,310 --> 00:04:45,740 sau đó c, sau đó quấn lại xung quanh, a, b, c, a, b, c. 69 00:04:45,740 --> 00:04:50,110 Vì vậy, chúng ta cần phải mod bởi chiều dài từ khóa để quấn lại xung quanh. 70 00:04:50,110 --> 00:04:57,280 >> Vì vậy, nếu điều này là một ký tự hoa, sau đó chúng tôi muốn mã hóa bởi 71 00:04:57,280 --> 00:05:01,450 vị trí của lá thư trong bảng chữ cái, mà chúng tôi nhận được bằng cách chỉ 72 00:05:01,450 --> 00:05:06,730 trừ ra khỏi vốn A. Và tương tự như vậy, đối với chữ thường, chúng tôi 73 00:05:06,730 --> 00:05:13,000 có thể nhận được chìa khóa mà chúng tôi muốn bằng cách trừ ra chữ thường a. 74 00:05:13,000 --> 00:05:16,910 Vì vậy, bất kể thư trong cụm từ khóa là một vốn 75 00:05:16,910 --> 00:05:21,640 chữ thường, chúng ta sẽ mã hóa bởi cùng một số tiền. 76 00:05:21,640 --> 00:05:28,680 >> Bây giờ chúng ta có chìa khóa của chúng tôi, chúng tôi thấy ở đây, rằng nếu tin tôi là một hoa 77 00:05:28,680 --> 00:05:32,660 nhân vật, sau đó chúng tôi muốn để tính toán vị trí trong bảng chữ cái đó 78 00:05:32,660 --> 00:05:39,460 nhân vật, thêm chính của chúng tôi với nó, quấn lại xung quanh để nếu chúng tôi đã đi qua một 79 00:05:39,460 --> 00:05:43,170 z chúng ta trở lại a, b, c, và như vậy. 80 00:05:43,170 --> 00:05:49,070 Sau đó, cuối cùng, thêm lại vốn A. Vì vậy, chúng tôi quay trở lại các [? Ascii?] 81 00:05:49,070 --> 00:05:52,010 phạm vi của các nhân vật thay vì vị trí số trong bảng chữ cái 82 00:05:52,010 --> 00:05:53,540 của những nhân vật này. 83 00:05:53,540 --> 00:05:56,610 >> Và chúng tôi làm điều tương tự cho ký tự chữ thường. 84 00:05:56,610 --> 00:06:00,070 Ngoại trừ chúng ta muốn trừ ra chữ thường một và thêm nó trở lại trong 85 00:06:00,070 --> 00:06:02,900 kết thúc, chữ thường a. 86 00:06:02,900 --> 00:06:08,120 Chú ý num_letter_seen mà chỉ là tăng lên nếu tin nhắn tôi đã 87 00:06:08,120 --> 00:06:09,640 chữ cái. 88 00:06:09,640 --> 00:06:15,790 Đây là cách chúng ta bỏ qua không gian, biểu tượng, và số trong cụm từ khóa của chúng tôi, kể từ khi 89 00:06:15,790 --> 00:06:20,520 num_letter_seen là những gì chúng ta đang sử dụng chỉ số vào từ khóa của chúng tôi. 90 00:06:20,520 --> 00:06:24,540 >> Cuối cùng, cuối cùng, bây giờ tin rằng i đã được mã hóa, chúng tôi 91 00:06:24,540 --> 00:06:26,280 in ra thông điệp tôi. 92 00:06:26,280 --> 00:06:27,890 Và đó là nó. 93 00:06:27,890 --> 00:06:28,670 Tên tôi là Rob. 94 00:06:28,670 --> 00:06:31,020 Và đây là Vigenere. 95 00:06:31,020 --> 00:06:32,850 >> [MUSIC CHƠI] 96 00:06:32,850 --> 00:06:36,651