>> ROB: Γεια σας, είμαι ο Rob, και ας αποκρυπτογραφήσει το πρόγραμμα Vigenere.
Έτσι, το πρώτο πράγμα που πρέπει να κάνουμε είναι να ότι ο χρήστης εισάγει αυτό που περιμέναμε
να στη γραμμή εντολών.
Έτσι, αν δεν argc είναι 2 που σημαίνει είτε ο χρήστης δεν θα εισέλθουν στο κορδόνι
θέλετε να χρησιμοποιείτε ως κρυπτογράφηση μας κορδόνι, ή
εισαγάγει πάρα πολλά πράγματα.
Και δεν ξέρουμε τι να κάνουμε με αυτά τα άλλα πράγματα.
>> Έτσι, τους λέμε τι θα πρέπει να έχουν τεθεί.
Και θα επιστρέψει.
Τώρα, αν υποτεθεί ότι argc ήταν 2, μπορούμε συνεχίσει με το υπόλοιπο του προγράμματος.
>> Εμείς ψευδώνυμο το όνομα του argv [1]
στην μεταβλητή-κλειδί.
Έτσι ώστε να μην χρειάζεται να χρησιμοποιήσετε το όνομα argv [1]
σε όλο το υπόλοιπο του προγράμματος.
Και ίσως θα ξεχάσουμε ό, τι αυτό σημαίνει ότι και ούτω καθεξής.
Λέξη-κλειδί είναι ένα πολύ καλύτερο όνομα.
Και θα τραβήξει αμέσως το μήκος των λέξεων-κλειδιών μας εδώ.
>> ΕΝΤΑΞΕΙ, έτσι τώρα θέλουμε να ελέγξουμε ότι λέξη-κλειδί μας είναι πραγματικά ισχύει.
Η λέξη-κλειδί που χρησιμοποιεί για την κρυπτογράφηση strings πρέπει απλώς να είναι αλφαβητική
χαρακτήρων.
Αν ο χρήστης εισάγει μη αλφαβητικά χαρακτήρες, πρέπει να πούμε, λέξη-κλειδί
πρέπει να περιέχει μόνο ένα από Z και στη συνέχεια επιστρέφουν.
Έτσι, αυτό για βρόχος επαναλαμβάνει πάνω από όλα χαρακτήρες των λέξεων-κλειδιών μας, ελέγχοντας
ότι αν κάποιος δεν είναι αλφαβητική συνέχεια θα πρέπει να εκτυπώσετε αυτή την προειδοποίηση.
>> Τώρα, όταν φτάσουμε σε αυτό το σημείο, γνωρίζουμε ότι η πρόταση θα πρέπει να είναι σωστές.
Η λέξη-κλειδί πρέπει να είναι σωστή.
Και τώρα πρέπει να πάρει το μήνυμα από ο χρήστης που μας θέλουν να
κρυπτογράφηση με αυτό το κλειδί φράση.
Έτσι για να πάρετε αυτό το μήνυμα, έχουμε ένα κάνουμε, ενώ βρόχο που πρόκειται να
συνεχώς να πάρει μια σειρά από τον χρήστη μέχρι να εισάγετε μια έγκυρη συμβολοσειρά.
>> Συνεχίζοντας, βλέπουμε εδώ αυτή τη μεταβλητή, int nun_letters_seen.
Θα δούμε γιατί χρειαζόμαστε ότι σε μια δεύτερη.
Αλλά αυτό για το βρόχο πρόκειται να μετακινηθείτε από i ισούται με 0 σε όλη τη διαδρομή μέχρι το i
ισούται με n, πράγμα που σημαίνει ότι είμαστε επανάληψη πάνω από όλες τις πιθανές
χαρακτήρες στο μήνυμα μας.
Επειδή θέλουμε να κρυπτογραφήσετε όλα οι χαρακτήρες στο μήνυμα μας.
Έτσι παρατηρήσετε κάνουμε αν (isalphamessage [I], γιατί δεν θέλουμε να κρυπτογραφήσετε
χαρακτήρες που δεν είναι αλφαβητική.
Εάν υπάρχουν σύμβολα, διαστήματα, ή αριθμούς, δεν το κάνουμε
θέλετε να κρυπτογραφήσετε εκείνους.
>> Τώρα, αν υποτεθεί ότι είναι αλφαβητική, πρώτα θέλουμε να καταλάβουμε τι
πραγματικά θέλετε να κρυπτογραφήσετε το μήνυμα που χρησιμοποιούν.
Λοιπόν, τι εννοώ με αυτό;
>> Ας υποθέσουμε ότι η φράση-κλειδί εισήγαγε ο χρήστης ήταν abc.
Αυτό είναι αυτό που χρησιμοποιείτε για να κρυπτογραφήσει.
Τώρα, αφελώς, πιστεύουμε ότι σημαίνει ότι θέλουμε να κρυπτογραφήσετε τον πρώτο χαρακτήρα
του μηνύματος μας από 0, δεδομένου ότι ένα μέσο περιστροφή του χαρακτήρα με το 0.
>> Θέλουμε να κρυπτογραφήσετε το δεύτερο χαρακτήρα κατά 1, τρίτο χαρακτήρα από 2,
ο τέταρτος χαρακτήρας από 0, η πέμπτη κατά 1, η έκτη από 2, και ούτω καθεξής.
Αλλά να θυμάστε, ότι θέλουμε να παρακάμψετε χώρους και τα σύμβολα και αριθμούς.
Αυτό σημαίνει ότι εάν ο χρήστης είχε εισέλθει Γεια σας κόσμο, όπως το μήνυμα
ότι θέλουν να κρυπτογραφήσετε, τότε θέλουμε να κρυπτογραφήσετε την ώρα από 0
που αντιστοιχεί στο Α, το e από 1, η l κατά 2, το l με 0, η o από 1.
Θέλουμε να παρακάμψετε το χώρο, κρυπτογραφημένη το w με 2, το Ο κατά 0, 1, 2, 0.
Έτσι παρατηρούμε, αν δεν είχε παραληφθεί το χώρο, τότε θα είχαμε κρυπτογραφημένα
το w από 0 και κατέληξε με η λανθασμένη σειρά.
>> Εντάξει, αυτό είναι ό, τι χρειαζόμαστε τη μεταβλητή num_letters_seen για.
Αν ήμασταν ακριβώς πρόκειται να κρυπτογραφήσετε χρησιμοποιώντας Η μέθοδος αυτή, η οποία δεν skip
τα σύμβολα, τις θέσεις, και οι αριθμοί, τότε μπορούσατε να χρησιμοποιήσετε μόνο τη μεταβλητή i, όπως αυτό
στο δείκτη σε φράση-κλειδί μας.
Εμείς πρέπει να χρησιμοποιήσετε για να κρατήσει num_letters_seen παρακολουθείτε την πραγματική θέση στην
φράση-κλειδί που θέλουμε να δείκτη.
Μέχρι εδώ, αν η λέξη-κλειδί που έχουμε, αν num_letter_seen mod keyword_length, έτσι
γιατί χρειαζόμαστε να mod με μήκος λέξεων-κλειδιών;
>> Λοιπόν, γειά σου κόσμος ήταν ένα καλό παράδειγμα.
Εάν η λέξη-κλειδί ήταν abc, τότε θα πρέπει για την κρυπτογράφηση συνεχώς από τότε b
Στη συνέχεια c, στη συνέχεια, τυλίξτε πίσω γύρω, α, β, γ, α, b, c.
Πρέπει λοιπόν να mod από το μήκος λέξη-κλειδί προκειμένου να γυρίσει πίσω γύρω.
>> Έτσι, αν αυτό είναι ένα κεφαλαίο γράμμα, τότε θέλουμε να κρυπτογραφήσει με το
Θέση της εν λόγω γράμμα του αλφαβήτου, το οποίο έχουμε πάρει από μόνο
αφαιρώντας από κεφάλαιο Α. και Ομοίως, για πεζά γράμματα, έχουμε
μπορεί να πάρει το κλειδί που θέλουμε από αφαιρώντας από ένα πεζό.
Έτσι, ανεξάρτητα από το αν η επιστολή στη φράση-κλειδί ήταν ένα κεφάλαιο ή
πεζό γράμμα, θα πάμε να κρυπτογράφηση κατά το ίδιο ποσό.
>> Τώρα που έχουμε το κλειδί μας, βλέπουμε εδώ, ότι αν το μήνυμα i είναι κεφαλαίο
χαρακτήρα, τότε θα θέλετε να υπολογίσετε το θέση στο αλφάβητο του ότι
χαρακτήρα, προσθέστε το κλειδί μας σε αυτό, τυλίξτε πίσω γύρω, έτσι ώστε αν πήγαμε παρελθόν ένα
z πάμε πίσω σε α, β, γ, και ούτω καθεξής.
Στη συνέχεια, τέλος, προσθέστε και πάλι στο κεφάλαιο Α. Έτσι, Ας στραφούμε πίσω στο [; Ascii?]
εύρος αυτών των χαρακτήρων, αντί του αριθμητική θέση στο αλφάβητο
από αυτούς τους χαρακτήρες.
>> Και κάνουμε το ίδιο πράγμα για πεζοί χαρακτήρες.
Εκτός θέλουμε να αφαιρέσουμε από πεζούς α και να το προσθέσουν πάλι στο
τέλος, πεζά ένα.
Σημειώστε ότι num_letter_seen είναι μόνο αυξάνονται εάν το μήνυμα ήμουν
αλφαβητικά.
Αυτό είναι το πώς θα παραλείψετε χώρους, σύμβολα και αριθμούς σε φράση-κλειδί μας, δεδομένου
num_letter_seen είναι αυτό που είμαστε χρησιμοποιώντας στο δείκτη στη λέξη-κλειδί μας.
>> Τέλος, στο τέλος, τώρα που το μήνυμα i έχει κρυπτογραφηθεί, εμείς
εκτυπώσετε το μήνυμα i.
Και αυτό είναι όλο.
Το όνομά μου είναι Rob.
Και αυτό είναι Vigenere.
>> [Παίζει μουσική]