1 00:00:00,000 --> 00:00:11,980 2 00:00:11,980 --> 00:00:16,980 >> ROB: Γεια σας, είμαι ο 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 Η λέξη-κλειδί που χρησιμοποιεί για την κρυπτογράφηση strings πρέπει απλώς να είναι αλφαβητική 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 σε όλη τη διαδρομή μέχρι το i 35 00:02:07,320 --> 00:02:10,940 ισούται με n, πράγμα που σημαίνει ότι είμαστε επανάληψη πάνω από όλες τις πιθανές 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 Αυτό σημαίνει ότι εάν ο χρήστης είχε εισέλθει Γεια σας κόσμο, όπως το μήνυμα 53 00:03:21,520 --> 00:03:26,590 ότι θέλουν να κρυπτογραφήσετε, τότε θέλουμε να κρυπτογραφήσετε την ώρα από 0 54 00:03:26,590 --> 00:03:32,680 που αντιστοιχεί στο Α, το e από 1, η l κατά 2, το l με 0, η o από 1. 55 00:03:32,680 --> 00:03:41,050 Θέλουμε να παρακάμψετε το χώρο, κρυπτογραφημένη το w με 2, το Ο κατά 0, 1, 2, 0. 56 00:03:41,050 --> 00:03:45,250 Έτσι παρατηρούμε, αν δεν είχε παραληφθεί το χώρο, τότε θα είχαμε κρυπτογραφημένα 57 00:03:45,250 --> 00:03:51,240 το w από 0 και κατέληξε με η λανθασμένη σειρά. 58 00:03:51,240 --> 00:03:57,470 >> Εντάξει, αυτό είναι ό, τι χρειαζόμαστε τη μεταβλητή num_letters_seen για. 59 00:03:57,470 --> 00:04:04,450 Αν ήμασταν ακριβώς πρόκειται να κρυπτογραφήσετε χρησιμοποιώντας Η μέθοδος αυτή, η οποία δεν skip 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 mod keyword_length, έτσι 65 00:04:32,240 --> 00:04:34,570 γιατί χρειαζόμαστε να mod με μήκος λέξεων-κλειδιών; 66 00:04:34,570 --> 00:04:36,630 >> Λοιπόν, γειά σου κόσμος ήταν ένα καλό παράδειγμα. 67 00:04:36,630 --> 00:04:42,310 Εάν η λέξη-κλειδί ήταν abc, τότε θα πρέπει για την κρυπτογράφηση συνεχώς από τότε b 68 00:04:42,310 --> 00:04:45,740 Στη συνέχεια c, στη συνέχεια, τυλίξτε πίσω γύρω, α, β, γ, α, b, c. 69 00:04:45,740 --> 00:04:50,110 Πρέπει λοιπόν να mod από το μήκος λέξη-κλειδί προκειμένου να γυρίσει πίσω γύρω. 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 >> Τώρα που έχουμε το κλειδί μας, βλέπουμε εδώ, ότι αν το μήνυμα i είναι κεφαλαίο 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 z πάμε πίσω σε α, β, γ, και ούτω καθεξής. 80 00:05:43,170 --> 00:05:49,070 Στη συνέχεια, τέλος, προσθέστε και πάλι στο κεφάλαιο Α. Έτσι, Ας στραφούμε πίσω στο [; 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 >> Τέλος, στο τέλος, τώρα που το μήνυμα i έχει κρυπτογραφηθεί, εμείς 91 00:06:24,540 --> 00:06:26,280 εκτυπώσετε το μήνυμα i. 92 00:06:26,280 --> 00:06:27,890 Και αυτό είναι όλο. 93 00:06:27,890 --> 00:06:28,670 Το όνομά μου είναι Rob. 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