>> ZAMYLA CHAN: Συγχαρητήρια για να τελειώσει σας
πρώτο ζευγάρι των Προγραμμάτων της C.
Γνωρίζω ότι η πρώτη επιδρομή στο C σύνταξη μπορεί να είναι αποκαρδιωτική.
Αλλά μπορώ να σας διαβεβαιώσω, στο τέλος της Φυσικά, θα είστε σε θέση να εξετάσουμε το
πρώτο ζευγάρι των εργασιών και ολοκληρώσει τους μέσα σε λίγα λεπτά.
>> Τώρα που είστε όλο και πιο εξοικειωμένοι με τη σύνταξη, ας πάμε στην Καίσαρα.
Στην Καίσαρα, ο χρήστης θα υποβάλει ακέραιος κλειδί ως γραμμή εντολών
επιχείρημα, και στη συνέχεια εισάγετε ένα απλό μήνυμα κειμένου στην προτροπή.
Το πρόγραμμα στη συνέχεια θα κρυπτογραφήσει Το κείμενο και εκτύπωση
ciphertext το μήνυμά τους.
>> Η κρυπτογράφηση για Caesar είναι αρκετά απλή.
Μετατόπιση κάθε γράμμα, τους απλό κείμενο, με το κλειδί.
Ως αποτέλεσμα, είναι επίσης αρκετά ανασφαλής.
Αλλά η εφαρμογή του Καίσαρα θα εισαγάγει μας ASCIIMath και τη σειρά των δεδομένων
δομές.
Θα φτάσουμε σε πιο σύνθετες αλγόριθμους κρυπτογράφησης αργότερα.
Με ένα Caesar κλειδί 2, το γράμμα Α απλό κείμενο θα εκπροσωπείται από
το γράμμα Γ, σε ciphertext επειδή C είναι δύο γράμματα μετά A. B θα είναι
εκπροσωπούμενη από τον D και C από την Ε. Προς το τέλος της αλφαβήτου, το W είναι
εκπροσωπούμενη από τον Υ, και X από Z. Αλλά Y δεν έχει δύο γράμματα μετά από αυτό, έτσι
οι αλγόριθμους κρυπτογράφησης τυλίγεται γύρω από το αλφάβητο.
Y σε μορφή απλού κειμένου έτσι εκπροσωπείται από Α σε ciphertext, και Ζ από τον B. Μπορεί να
βοηθήσει να δείτε το Caesar Cypher, όπως μια συνεχής τροχός αλφάβητο.
>> Για να κρυπτογραφήσει το κείμενο τους, ο χρήστης θα τεθεί δύο επιχειρήματα
στη γραμμή εντολών -
. / Caesar ακολουθείται από ένα πλήκτρο.
Όπως πάντα, δεν μπορούμε να εμπιστευόμαστε τον χρήστη εντελώς να εισέλθουν εισόδου που καθιστούν
αίσθηση για το πρόγραμμά μας.
Γι 'αυτό και θα πρέπει να επικυρώσει τους εντολή εισόδου γραμμής.
>> Αντί να χρησιμοποιεί int main κενό, είμαστε χρησιμοποιώντας int main, int argc, argv εγχόρδων.
Ο ακέραιος μεταβλητή argc αντιπροσωπεύει ο αριθμός των arguments που δίνονται σε
η γραμμή εντολών.
Και argv είναι ένας πίνακας, ή να σκεφτείτε από το ως μια λίστα, από τα επιχειρήματα που πέρασε μέσα
>> Έτσι, για Καίσαρα, πώς μπορούμε να επικυρώσει την είσοδο του χρήστη;
Λοιπόν, θα πρέπει μόνο να εισέρχονται δύο επιχειρήματα της γραμμής εντολών -
. / Καίσαρα και ένα κλειδί.
Έτσι, αν argc δεν είναι 2, αυτό σημαίνει ότι ξέχασαν ούτε ένα κλειδί και μόνο
εγγράφονται. / καίσαρα, ή τέθηκε πολλαπλά πλήκτρα.
>> Αν αυτή είναι η περίπτωση, τότε θα θέλετε να εκτυπώσετε τις οδηγίες
και κλείστε το πρόγραμμα.
Θα πρέπει να προσπαθήσετε ξανά από τη γραμμή εντολών.
Αλλά ακόμα και αν argc είναι 2, θα πρέπει να ελέγξετε εάν
να σας δώσει ένα έγκυρο κλειδί.
Για Καίσαρα, θα πρέπει να έχετε έναν ακέραιο.
Αλλά argv είναι ένας πίνακας από strings.
Πώς μπορείτε να αποκτήσετε πρόσβαση σε αυτό το κλειδί;
>> Μια γρήγορη ματιά σε πίνακες -
δομές δεδομένων που κατέχουν πολλαπλές αξίες του ίδιου τύπου δεδομένων.
Οι συμμετοχές είναι μηδενικό δείκτη, πράγμα που σημαίνει ότι Το πρώτο στοιχείο είναι ο μηδενικός δείκτης
και το τελευταίο στοιχείο είναι το μέγεθος του δείκτη μείον 1, όπου το μέγεθος είναι ο αριθμός των
στοιχεία στη συστοιχία.
>> Αν έχω δηλώσει ένα νέο γραμματοκιβώτιο σειρά εγχόρδων μήκους 3, οπτικά, είναι
μοιάζει με αυτό.
Τρία δοχεία για έγχορδα , Πλάι-πλάι.
Για να αποκτήσετε πρόσβαση σε οποιοδήποτε στοιχείο, πληκτρολογείτε το όνομα του πίνακα και στη συνέχεια να αναφέρουν
το δείκτη σε αγκύλες.
Εδώ, είμαι απόδοση αξίας σε κάθε στοιχείου, όπως ακριβώς θα κάνατε με οποιοδήποτε
άλλη μεταβλητή string.
>> Έτσι, για να αποκτήσετε πρόσβαση εντολή επιχειρήματά μας γραμμή, το μόνο που έχουμε να κάνουμε είναι να έχουν πρόσβαση
το σωστό στοιχείο του πίνακα argv.
Εάν ο χρήστης εισάγει. / Blastoff Team Rocket στο τερματικό, argv 0 θα
να. / blastoff.
argv θα είναι η ομάδα, και arg2 θα πυραύλων.
>> Τώρα που μπορούμε να έχουμε πρόσβαση κλειδί μας, χρειάζεται ακόμη να
βεβαιωθείτε ότι είναι σωστό.
Πρέπει να το μετατρέψει σε έναν ακέραιο αριθμό.
Αλλά δεν μπορούμε απλώς να πετάξει όπως έχουμε κάνει στο παρελθόν.
Ευτυχώς, το Α για να λειτουργήσει Y φροντίζει από αυτό για μας, ακόμη και επιστρέφει 0
Εάν η συμβολοσειρά δεν μπορούν να μετατραπούν σε έναν ακέραιο αριθμό.
Είναι στο χέρι σας, όμως, να σας πω ο χρήστης γιατί δεν θα
αφήστε το πρόγραμμα να προχωρήσει.
Αποθηκεύστε το αποτέλεσμα του Α Υ σε ένα ακέραιος, και εκεί έχετε το κλειδί σας.
Το επόμενο μέρος είναι απλή.
Προτρέπει το χρήστη για απλό κείμενο τους, η οποία θα είναι τα δεδομένα τύπου string.
Ευτυχώς για εμάς, όλοι οι χρήστες εισαχθούν χορδές είναι έγκυρες.
>> Τώρα που έχουμε όλες οι απαιτούμενες πληροφορίες από το χρήστη, ήρθε η ώρα για εμάς να
κρυπτογραφήσει το μήνυμά τους.
Η έννοια του Καίσαρα είναι απλή αρκετή για να καταλάβει.
Αλλά πώς ο υπολογιστής σας γνωρίζουμε που γράμματα έρχονται μετά από ένα άλλο;
>> Εδώ είναι όπου η ASCII πίνακα μπαίνει
Κάθε χαρακτήρας έχει ένα ακέραιο αριθμός που σχετίζεται με αυτό.
Το Capital A είναι 65.
Κεφάλαιο Β είναι 66.
Πεζά ένα είναι 97.
Πεζά b είναι 98.
Αλλά οι χαρακτήρες δεν περιορίζονται σε μόλις αλφαβητική αριθμούς.
Για παράδειγμα, το σύμβολο @ είναι ASCII αριθμό 64.
>> Πριν ασχολούνται με το σύνολο εγχόρδων, ας προσποιηθούμε εμείς απλά πρέπει να στρέψουμε
ένα χαρακτήρα.
Λοιπόν, το μόνο που θέλουν να μετατοπίσουν την πραγματική γράμματα στο απλό κείμενο, δεν
χαρακτήρες ή αριθμούς.
Έτσι, το πρώτο πράγμα που θα θελήσετε να ελέγξετε είναι αν ο χαρακτήρας είναι
το αλφάβητο.
>> Η isalpha λειτουργία το κάνει αυτό για μας και επιστρέφει μια Boolean -
αλήθεια αν οι χαρακτήρες είναι ένα γράμμα, false αν άλλως.
Δύο άλλες χρήσιμες λειτουργίες είναι isupper και islower, με
αυτονόητη ονόματα.
Θα επιστρέψει true εάν το συγκεκριμένο χαρακτήρα είναι κεφαλαία ή πεζά,
αντιστοίχως.
Δεδομένου ότι είναι Booleans, είναι χρήσιμο να χρησιμοποιηθούν ως όροι.
>> Αν isalpha επιστρέφει true, θα χρειαστείτε να μετατοπίσει τον χαρακτήρα από το κλειδί.
Οπότε ας ανοίξουμε την ASCIIMath και να κάνετε κάποια ASCII μαθηματικά.
Η χρήση του είναι πολύ παρόμοια με τη χρήση στον Καίσαρα και παίρνει σε ένα κλειδί στο
γραμμή εντολών.
>> Αν τρέξω ASCIIMath 5, φαίνεται να προσθέσετε 5 σε ένα, που μου έδωσε το γράμμα F, και
εμφανίζοντας την τιμή ASCII.
Έτσι, ας ρίξουμε μια ματιά στο πρόγραμμα.
>> Ίσως αναρωτιέστε, ακριβώς εδώ, γιατί e-mail είναι ένας ακέραιος αριθμός, όταν είναι
σαφώς, καλά, μια επιστολή.
Αποδεικνύεται ότι οι χαρακτήρες και ακέραιοι είναι εναλλάξιμα.
Με την τοποθέτηση το γράμμα Α σε ενιαίο εισαγωγικά, ο ακέραιος μπορεί να αποθηκεύσει
η τιμή ASCII του κεφαλαίου A. Προσέξτε, όμως.
Χρειάζεται μόνο τα ρούχα.
Χωρίς το ενιαίο εισαγωγικά, η compiler θα δούμε για μια μεταβλητή
που ονομάζεται Α, και όχι ο χαρακτήρας.
>> Τότε μπορώ να προσθέσω γράμμα και ένα κλειδί, την αποθήκευση του ποσό στο int αποτέλεσμα μεταβλητές.
Ακόμη και αν το αποτέλεσμα είναι τύπου δεδομένων ακέραιος, printf δήλωσή μου χρησιμοποιεί το
% C κράτησης θέσης για τους χαρακτήρες.
Έτσι, το πρόγραμμα τυπώνει το χαρακτήρα που συνδέεται με τον ακέραιο αποτέλεσμα.
Και από τη στιγμή που τυπώνεται το ακέραιο μορφή, καθώς και τη χρήση% d, βλέπουμε
τον αριθμό, καθώς και.
Έτσι τώρα μπορείτε να δείτε ότι εμείς θεραπεία χαρακτήρες και
ακέραιοι, και το αντίστροφο.
>> Ας δοκιμάσουν ASCIIMath λίγα περισσότερες φορές χρησιμοποιώντας 25 ως κλειδί.
Παίρνουμε το γράμμα z.
Τώρα προσπαθούμε 26.
Θέλουμε να πάρει το γράμμα ένα, αλλά αντί να πάρει ένα αριστερό βραχίονα.
Έτσι, προφανώς, προσθέτοντας απλώς το κλειδί για την επιστολή δεν θα το κάνει.
Πρέπει να βρούμε μια φόρμουλα για να τυλίξει γύρω από το αλφάβητο, όπως μας
παράδειγμα στην αρχή έκανε.
>> Ένας τύπος για την Καίσαρα μετατόπιση είναι ως ακολούθως.
γ ισούται με p συν k modulo 26.
Να θυμάστε ότι modulo είναι ένα χρήσιμο λειτουργία που μας δίνει το υπόλοιπο
της διαίρεσης έναν αριθμό από το άλλο.
Ας εφαρμόσουν αυτόν τον τύπο για τον κάμπο έγγραφο κειμένου με ένα κλειδί 2.
Η ASCII τιμή του y είναι 89, η οποία μας δίνει 91 modulo 26,
η οποία ισούται με 13 -
σίγουρα δεν είναι η τιμή ASCII του Α, η οποία είναι 67.
>> Χιούμορ μου τώρα και να απομακρυνθεί από το ASCII τιμές σε ένα αλφαβητικό ευρετήριο
όπου το Α είναι μηδέν και το Ζ είναι 25, πράγμα που σημαίνει ότι το Υ είναι 24.
24 συν 2, modulo 6, μας δίνει 26, modulo 26, 0, η οποία είναι η
αλφαβητικό ευρετήριο a.
Έτσι, αυτός ο τύπος φαίνεται να ισχύει για το αλφαβητικό ευρετήριο της επιστολής και
Δεν ASCII αξία του.
>> Αλλά μπορείτε να ξεκινήσετε με τιμές ASCII.
Και για να εκτυπώσετε το χαρακτήρα κρυπτογράφημα, θα πρέπει ASCII αξία της, καθώς και.
Είναι στο χέρι σας, στη συνέχεια, να καταλάβω Πώς να στραφούν εμπρός και πίσω.
>> Μόλις καταλάβουμε το σωστό τύπο για ένα χαρακτήρα, το μόνο που πρέπει να κάνετε
είναι να εφαρμόζουν την ίδια φόρμουλα για κάθε επιστολή στον απλό κείμενο -
μόνο εάν το έγγραφο είναι αλφαβητική, Φυσικά.
Και να θυμάστε ότι θα πρέπει να διατηρηθεί την περίπτωση, άνω ή κάτω, αυτό είναι όπου
η isUpper και τις λειτουργίες islower προαναφέρθηκε θα έρθει σε πρακτικό.
Μπορεί να έχετε δύο τύπους -
μία για κεφαλαία γράμματα και μία για πεζούς.
Έτσι isUpper ένα islower θα σας βοηθήσει καθορίσει ποια φόρμουλα που εφαρμόζεται.
>> Πώς να εφαρμόσετε τον τύπο σας σε κάθε ενιαίο χαρακτήρα σε μια σειρά;
Λοιπόν, ένα string είναι μόνο ένα πίνακας χαρακτήρων.
Έτσι, μπορείτε να έχετε πρόσβαση σε κάθε χαρακτήρα ομαδοποίηση πάνω από κάθε χαρακτήρα στην
σειρά σε ένα for loop.
Όσον αφορά την κατάσταση του σας για το βρόχο, η συνάρτηση strlen, για κορδόνι
μήκος, θα έρθει σε πρακτικό.
Παίρνει σε μια σειρά ως πρώτη ύλη και επιστρέφει το μήκος του string.
Σιγουρευτείτε για να συμπεριλάβει το δικαίωμα βιβλιοθήκη να χρησιμοποιήσετε τη λειτουργία μήκους.
>> Και εκεί που έχετε ciphertext σας.
Το όνομά μου είναι ο Zamyla.
Και [SPEAKING CODE].