Δημιούργησε μια υλοποίηση του κρυπτογραφήματος Vigenère. Το κρυπτογράφημα Vigenère είναι ένα απλό κρυπτογράφημα αντικατάστασης.
Ένα κρυπτογράφημα είναι ένας αλγόριθμος που χρησιμοποιείται για την κρυπτογράφηση, ή κωδικοποίηση, μιας συμβολοσειράς. Η μη κρυπτογραφημένη συμβολοσειρά ονομάζεται απλό κείμενο και η κρυπτογραφημένη συμβολοσειρά ονομάζεται κρυπτοκείμενο. Η μετατροπή του απλού κειμένου σε κρυπτοκείμενο ονομάζεται κωδικοποίηση, ενώ η αντίστροφη διαδικασία ονομάζεται αποκωδικοποίηση.
Σε έναν κρυπτογράφημα αντικατάστασης, κάθε γράμμα του απλού κειμένου αντικαθίσταται από ένα γράμμα του κρυπτοκειμένου, το οποίο υπολογίζεται με τη βοήθεια ενός κλειδιού. (Σημείωση: το γράμμα αντικατάστασης μπορεί να είναι ίδιο με το αρχικό γράμμα.)
Σε αυτό το κρυπτογράφημα, το κλειδί είναι μια σειρά από πεζά γράμματα, όπως "abcd".
Κάθε γράμμα του απλού κειμένου μετατοπίζεται ή περιστρέφεται κατά μια απόσταση που βασίζεται σε ένα αντίστοιχο γράμμα του κλειδιού.
Ένα "a" στο κλειδί σημαίνει μετατόπιση 0 (δηλαδή καμία μετατόπιση).
Ένα "b" στο κλειδί σημαίνει μετατόπιση 1.
Ένα "c" στο κλειδί σημαίνει μετατόπιση 2, και ούτω καθεξής.
Το πρώτο γράμμα του απλού κειμένου χρησιμοποιεί το πρώτο γράμμα του κλειδιού, το δεύτερο γράμμα του απλού κειμένου χρησιμοποιεί το δεύτερο γράμμα του κλειδιού, και ούτω καθεξής. Αν τα γράμματα του κλειδιού τελειώσουν πριν τελειώσουν τα γράμματα του απλού κειμένου, ξεκίνα πάλι από την αρχή του κλειδιού.
Αν το κλειδί περιέχει μόνο ένα γράμμα, όπως "dddddd", τότε όλα τα γράμματα του απλού κειμένου μετατοπίζονται κατά την ίδια ποσότητα (τρία σε αυτό το παράδειγμα), κάτι που θα το έκανε ίδιο με ένα κυκλικό κρυπτογράφημα ή κρυπτογράφημα μετατόπισης (που μερικές φορές ονομάζεται κρυπτογράφημα του Καίσαρα).
Για παράδειγμα, το απλό κείμενο "iamapandabear" θα γινόταν "ldpdsdqgdehdu".
Αν το κλειδί περιέχει μόνο το γράμμα "a" (μία ή περισσότερες φορές), η απόσταση μετατόπισης είναι μηδέν και το κρυπτοκείμενο είναι ίδιο με το απλό κείμενο.
Συνήθως όμως το κλειδί είναι πιο περίπλοκο από αυτό!
Αν το κλειδί είναι "abcd", τότε τα γράμματα του απλού κειμένου θα μετατοπίζονταν κατά απόσταση 0, 1, 2 και 3.
Αν το απλό κείμενο είναι "hello", χρειαζόμαστε 5 μετατοπίσεις, οπότε το κλειδί θα επαναληφθεί κυκλικά, δίνοντας αποστάσεις μετατόπισης 0, 1, 2, 3 και 0.
Εφαρμόζοντας αυτές τις μετατοπίσεις στα γράμματα του "hello" παίρνουμε "hfnoo".
Αν δεν δοθεί κλειδί, δημιούργησε ένα κλειδί που αποτελείται από τουλάχιστον 100 τυχαία πεζά γράμματα του λατινικού αλφαβήτου.
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Odin με 73 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.