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 σύνταξη μπορεί να είναι αποκαρδιωτική. 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 ciphertext το μήνυμά τους. 12 00:00:40,020 --> 00:00:42,980 >> Η κρυπτογράφηση για Caesar είναι αρκετά απλή. 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 Με ένα Caesar κλειδί 2, το γράμμα Α απλό κείμενο θα εκπροσωπείται από 19 00:01:01,680 --> 00:01:07,580 το γράμμα Γ, σε 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 εκπροσωπούμενη από τον Υ, και X από Z. Αλλά Y δεν έχει δύο γράμματα μετά από αυτό, έτσι 22 00:01:18,550 --> 00:01:21,070 οι αλγόριθμους κρυπτογράφησης τυλίγεται γύρω από το αλφάβητο. 23 00:01:21,070 --> 00:01:27,190 Y σε μορφή απλού κειμένου έτσι εκπροσωπείται από Α σε ciphertext, και Ζ από τον B. Μπορεί να 24 00:01:27,190 --> 00:01:32,080 βοηθήσει να δείτε το Caesar Cypher, όπως μια συνεχής τροχός αλφάβητο. 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 . / Caesar ακολουθείται από ένα πλήκτρο. 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 main κενό, είμαστε χρησιμοποιώντας int main, int argc, argv εγχόρδων. 32 00:01:57,285 --> 00:02:01,730 Ο ακέραιος μεταβλητή argc αντιπροσωπεύει ο αριθμός των arguments που δίνονται σε 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 είναι ένας πίνακας από strings. 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 άλλη μεταβλητή string. 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 Team Rocket στο τερματικό, 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 Αποθηκεύστε το αποτέλεσμα του Α Υ σε ένα ακέραιος, και εκεί έχετε το κλειδί σας. 74 00:04:10,710 --> 00:04:12,070 Το επόμενο μέρος είναι απλή. 75 00:04:12,070 --> 00:04:15,940 Προτρέπει το χρήστη για απλό κείμενο τους, η οποία θα είναι τα δεδομένα τύπου string. 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 Το Capital A είναι 65. 85 00:04:41,380 --> 00:04:43,310 Κεφάλαιο Β είναι 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 Για παράδειγμα, το σύμβολο @ είναι ASCII αριθμό 64. 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 λειτουργία το κάνει αυτό για μας και επιστρέφει μια Boolean - 97 00:05:14,460 --> 00:05:18,570 αλήθεια αν οι χαρακτήρες είναι ένα γράμμα, false αν άλλως. 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 Θα επιστρέψει true εάν το συγκεκριμένο χαρακτήρα είναι κεφαλαία ή πεζά, 101 00:05:27,370 --> 00:05:28,740 αντιστοίχως. 102 00:05:28,740 --> 00:05:33,770 Δεδομένου ότι είναι Booleans, είναι χρήσιμο να χρησιμοποιηθούν ως όροι. 103 00:05:33,770 --> 00:05:38,310 >> Αν isalpha επιστρέφει true, θα χρειαστείτε να μετατοπίσει τον χαρακτήρα από το κλειδί. 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 σε ένα, που μου έδωσε το γράμμα F, και 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 >> Ίσως αναρωτιέστε, ακριβώς εδώ, γιατί e-mail είναι ένας ακέραιος αριθμός, όταν είναι 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 Χωρίς το ενιαίο εισαγωγικά, η compiler θα δούμε για μια μεταβλητή 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 γ ισούται με p συν k modulo 26. 136 00:07:42,750 --> 00:07:46,040 Να θυμάστε ότι modulo είναι ένα χρήσιμο λειτουργία που μας δίνει το υπόλοιπο 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 modulo 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 όπου το Α είναι μηδέν και το Ζ είναι 25, πράγμα που σημαίνει ότι το Υ είναι 24. 144 00:08:18,690 --> 00:08:25,830 24 συν 2, modulo 6, μας δίνει 26, modulo 26, 0, η οποία είναι η 145 00:08:25,830 --> 00:08:28,170 αλφαβητικό ευρετήριο a. 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 Λοιπόν, ένα string είναι μόνο ένα πίνακας χαρακτήρων. 161 00:09:25,910 --> 00:09:31,150 Έτσι, μπορείτε να έχετε πρόσβαση σε κάθε χαρακτήρα ομαδοποίηση πάνω από κάθε χαρακτήρα στην 162 00:09:31,150 --> 00:09:33,450 σειρά σε ένα for loop. 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 Παίρνει σε μια σειρά ως πρώτη ύλη και επιστρέφει το μήκος του string. 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 Και [SPEAKING CODE]. 170 00:09:54,510 --> 00:10:02,944