Διαδρομές
/
Haskell
Haskell
/
Ασκήσεις
/
Κρυπτογράφημα Atbash
Κρυπτογράφημα Atbash

Κρυπτογράφημα Atbash

Μέτριο

Οδηγίες

Δημιούργησε μια υλοποίηση του κρυπτοσυστήματος 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.

Ως προαιρετική επέκταση αυτής της άσκησης, μπορείς να

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 = ...

Αυτό το μέρος είναι εντελώς προαιρετικό.


Πηγή

WikipediaΟ σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Haskell Exercism

Έτοιμος να ξεκινήσεις την άσκηση Κρυπτογράφημα Atbash;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Haskell με 107 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.