Star_Light έγραψε:
...
Απλη μετατόπιση κανει ναι. Βασικα κάνει την εξής μετατόπιση .
Παίρνει κάθε φορα το υπόλοιπο της διαίρεσης του πλήθους των γραμματών του αλφαβητου με το άθροισμα του κλειδιού και του εκάστοτε χαρακτήρα την φορά στο αρχικό κειμενο το οποιο το λεμε plaintext.
Δηλαδη :
- Κώδικας: Επιλογή όλων
En = (p + k) mod 26
mod -> υπολοιπο διαίρεσης
(p+k) -> άθροισμα του κλειδιού και του εκάστοτε χαρακτήρα την φορά στο αρχικό κειμενο
26 για αγγλικο , 24 για ελληνικο αφλάβητο.
Έτσι είναι.
Ο τρόπος για να ανεξαρτητοποιήσετε το αλφάβητο από τα ASCII codes των γραμμάτων του είναι να δουλεύετε με τα indicies των γραμμάτων μέσα στο αλφάβητό σας, και όχι απευθείας με τα ASCII codes τους.
Δηλαδή, αν π.χ. έχουμε το αλφάβητο: "j*8Kl_-tW" και θέλουμε να κρυπτογραφήσουμε ας πούμε το K με μετατόπιση 2 χαρακτήρων, αντί να προσθέσουμε το 2 στο ASCII code του Κ το προσθέτουμε στο index του K (δηλαδή στη θέση που έχει μέσα στην αλφάβητο, που είναι η 3η μιας και οι πίνακες είναι πάντα zero-indexed). Οπότε ο χαρακτήρας που βρίσκεται στη θέση 3 (το Κ) θα αντικατασταθεί με τον χαρακτήρα που βρίσκεται στη θέση 3+2=5 (το _).
Δηλαδή αν ab το αλφάβητο, τότε η παραπάνω περιγραφή μεταφράζεται σε...
- Κώδικας: Επιλογή όλων
int i, shiftby = 2;
ab[i] = ab[i+shiftby];
Με άλλα λόγια δουλεύουμε με indicies και όχι με ASCII codes.



