Δημιούργησε μια υλοποίηση του κρυπτοσυστήματος Atbash, ενός αρχαίου συστήματος κρυπτογράφησης που δημιουργήθηκε στη Μέση Ανατολή.
Το κρυπτοσύστημα Atbash είναι ένα απλό κρυπτοσύστημα αντικατάστασης που βασίζεται στην αντιστροφή όλων των γραμμάτων του αλφαβήτου, έτσι ώστε το αλφάβητο που προκύπτει να είναι ανάποδο. Το πρώτο γράμμα αντικαθίσταται από το τελευταίο, το δεύτερο από το προτελευταίο, και ούτω καθεξής.
Ένα κρυπτοσύστημα Atbash για το λατινικό αλφάβητο θα ήταν ως εξής:
Plain: abcdefghijklmnopqrstuvwxyz
Cipher: zyxwvutsrqponmlkjihgfedcba
Είναι ένα πολύ αδύναμο κρυπτοσύστημα, γιατί έχει μόνο ένα πιθανό κλειδί και είναι ένα απλό μονοαλφαβητικό κρυπτοσύστημα αντικατάστασης. Ωστόσο, αυτό μπορεί να μην αποτελούσε πρόβλημα την εποχή του κρυπτοσυστήματος.
Το κρυπτοκείμενο γράφεται σε ομάδες σταθερού μήκους, με το παραδοσιακό μέγεθος ομάδας να είναι 5 γράμματα, αφήνοντας τους αριθμούς αμετάβλητους, και η στίξη εξαιρείται. Αυτό γίνεται για να είναι πιο δύσκολο να μαντέψει κανείς πράγματα με βάση τα όρια των λέξεων. Όλο το κείμενο θα κωδικοποιείται με πεζά γράμματα.
test δίνει gvhg
x123 yes δίνει c123b vh
gvhg δίνει test
gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt δίνει thequickbrownfoxjumpsoverthelazydog
Πρέπει να υλοποιήσεις τις συναρτήσεις decode και encode, οι οποίες αποκωδικοποιούν και κωδικοποιούν μια String χρησιμοποιώντας ένα κρυπτογράφημα Atbash.
Μπορείς να χρησιμοποιήσεις την υπογραφή που σου δίνεται αν δεν είσαι σίγουρος για τους τύπους, αλλά μην την αφήσεις να περιορίσει τη δημιουργικότητά σου.
Αυτή η άσκηση δουλεύει με δεδομένα κειμένου. Για ιστορικούς λόγους, ο τύπος
String της Haskell είναι συνώνυμος με το [Char], μια λίστα χαρακτήρων. Για πιο
αποδοτικό χειρισμό δεδομένων κειμένου, μπορείς να χρησιμοποιήσεις τον τύπο Text.
Ως προαιρετική επέκταση αυτής της άσκησης, μπορείς να
- text στη λίστα εξαρτήσεών σου στο package.yaml.Data.Text με τον εξής
τρόπο:import qualified Data.Text as T
import Data.Text (Text)
Text, π.χ. decode :: Text -> Text, και να αναφέρεσαι
στους συνδυαστές του Data.Text ως π.χ. T.pack.Data.Text.String με Text στο Atbash.hs, δηλαδή:decode :: Text -> Text
decode cipherText = ...
encode :: Text -> Text
encode plainText = ...
Αυτό το μέρος είναι εντελώς προαιρετικό.
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Haskell με 107 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.