ΚΡΥΠΤΟΓΡΑΦΗΣΗ ΚΑΙ ΑΠΟΚΡΥΠΤΟΓΡΑΦΗΣΗ ΜΕ ΤΟ ΜΑΤΗΕΜΑΤΙca-...
Post on 28-Jul-2015
236 Views
Preview:
TRANSCRIPT
ΚΡΥΠΤΟΓΡΑΦΗΣΗ ΚΑΙ ΑΠΟΚΡΥΠΤΟΓΡΑΦΗΣΗ
ΜΕ ΤΟ ΜΑΤΗΕMATICA
ΜΙΧΑΛΗΣ ΝΙΚΟΛΑΟΥ
ΜΙΧΑΛΗΣ ΝΙΚΟΛΑΟΥ 9-03-06
ΑΛΓΟΡΙΘΜΟΣ ΚΡΥΠΤΟΓΡΑΦΗΣΗΣ ΚΑΙ ΑΠΟΚΡΥΠΤΟΓΡΑΦΗΣΗΣ ΚΕΙΜΕΝΟΥ ΜΕ ΑΓΓΛΙΚΟΥΣ ΚΕΦΑΛΑΙΟΥΣ ΧΑΡΑΚΤΗΡΕΣ ΜΕ ΚΩΔΙΚΟΠΟΙΗΣΗ ASCII ΜΕ ΧΡΗΣΗ ΤΟΥ MATHEMATICA.
_ A B C D E F G H I J K L M N O P Q R S T U
32 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
V W X Y Z ?
86 87 88 89 90 63
Στο επόμενο κείμενο εντολών περιγράφεται ο αλγόριθμος μετατροπής ενός κειμένου με κεφαλαίους αγγλικούς χαρακτήρες στην αντίστοιχη ακολουθία αριθμών σύμφωνα με την κωδικοποίηση ASCII περιλαμβανομένου του κενού χαρακτήρα και του χαρακτήρα ‘?’ , καθώς και η αντίστροφη διαδικασία , χρησιμοποιώντας το πακέτο MATHEMATICA.
alphabet1= “ABCDEFGHIJKLMNOPQRSTUVWXYZ?”;numbers1= “32656667686970717273747576777879808182838485868788899063”;quantify1= Table[StringTake[alphabet1, {I}] → StringTake[numbers1, {2*i-1,2*i}], {i, 1, 28}];txt2num1[plaintext_] := ToExpression[StringReplace[plaintext, quantify1]];
num2txt1[n_] := Module[{c, x, z}, x=n; c= Characters[alphabet1]; z={} ;While [x>0, z= Which[Mod[x, 100] != 32 != 63, Prepend[z, c[[Mod[x, 100] – 63]]], Mod[x,100] = = 63, Prepend[z, c[[Mod[x, 100] – 35]]], Mod[x,100] = = 32, Prepend[z, c[[Mod[x, 100] - 31]]]];x= Floor[x/100]]; StringJoin[z]];
alph1[n_] := num2txt1[n]; num1[n_] := txt2num1[n];txt2num[plaintext_] := txt2num1[plaintext];num2text[n_] := num2txt1[n];
Επεξηγώντας το πως χρησιμοποιείται το παραπάνω σώμα εντολών στο MATHEMATICA , αφού κάνουμε evaluation απο το Κernel του mathematica το παραπάνω σώμα εντολών , τότε πληκτρολογώντας στη συνέχεια την εντολή
num1[“HI”] και κάνοντας evaluation παίρνω την αντίστοιχη ακολουθία α= 7273
Δοθέντος του n και του e μπορούμε να κρυπτογραφήσουμε το κείμενο μας που στην περίπτωση μας είναι το “HI” και να το αποκρυπτογραφήσουμε στην συνέχεια ....
Για παράδειγμα ....αν n=823091 και e=17
Βρίσκουμε το c= nmodae
με την εντολή PowerMod[α, e , n ] και evaluation
PowerMod[7273,17,823091] = 338114
Μόλις κρυπτογραφήσαμε το κείμενο μας ....
Τώρα για να αποκρυπτογραφήσουμε την ακολουθία 338114 κάνουμε τα εξής ...
Πρώτα βρίσκουμε την συνάρτηση Euler φ(n) ή φ(823091) .Αυτό γίνεται με χρήση της εντολής EulerPhi[823091] και evaluation .
EulerPhi[823091]=821184
Το d που χρειαζόμαστε για την αποκρυπτογράφηση που υπολογίζεται απο την σχέση d*e = 1 mod φ(n) βρίσκεται μέσω της εντολής PowerMod[e,-1,φ(n)] και evaluation. Συγκεκριμένα ....
PowerMod[17,-1,821184] = 48305
Τώρα για να αποκρυπτογραφήσουμε το κείμενο μας , χρειαζόμαστε να υπολογίσουμε την
Στο Mathematica , αυτό γίνεται ως εξής PowerMod[c, d , n ]
PowerMod[338114, 48305 , 823091 ] = 7273
Μόλις αποκρυπτογραφήσαμε το κείμενο μας .....η επόμενη κίνηση μας είναι να καλέσουμε την συνάρτηση , alph1 ,που φτιάξαμε στην αρχή της σελίδας και την οποία κάναμε evaluation απο την αρχή .
Πληκτρολογούμε alph1[7273] και επιλέγουμε evaluation ….τότε ....
HI
Σημείωση .....Αν το κείμενο μας που μετατρέψαμε σε ASCII είναι μεγαλύτερο του n , τότε χωρίζουμε το κείμενο μας (αριθμό πλέον μετά την κλήση της num1[“KEIMENO”] ) σε ομάδες , καθεμία μικρότερη απο το n και κάνουμε ότι είπαμε παραπάνω για καθεμία απο τις ομάδες αυτές , και μετά κάνουμε συρραφή των αποτελεσμάτων . Το ίδιο κάνουμε κατα την αντίστροφη διαδικασία .
Π.χ num1[“HOW ARE U?”] = 72798732658269328563 οπότε αφού είναι μεγαλύτερο του n=823091 , το σπάω στα τμήματα 727987, 326582 , 693285 , 63 μικρότερα του n, ίδιας τάξης ή κατόπιν συμφωνίας συγκεκριμένο αριθμό ψηφίων και τα κρυπτογραφώ με τα παραπάνω e , n .
PowerMod[727987,17,823091]=813867 , PowerMod[326582,17,823091]=105809, PowerMod[693285,17,823091]=684069, PowerMod[63,17,823091]=170105 …..
το κρυπτογραφημένο κείμενο είναι το 813867105809684069170105 ....
Για να το αποκρυπτογραφήσω αρκεί να το χωρίσω πάλι σε αριθμούς της τάξης του n , αλλα μικρότερους .
Χρησιμοποιώντας το d που είχαμε βρεί προηγουμένως βρίσκουμε τα αντίστοιχα PowerMod[αριθμός,d,n]
nmodcd
PowerMod[813867,48305,823091]= 727987 ,
PowerMod[105809, 48305, 823091]= 326582 ,
PowerMod[684069, 48305, 823091]= 693285 ,
PowerMod[170105, 48305, 823091]= 63,
δηλ, το αποκρυπτογραφημένο μήνυμα μας είναι η συρραφή των αριθμών 72798732658269328563 .
το οποίο σύμφωνα με την κωδικοποίηση ASCII είναι το .....
alph1[72798732658269328563] = HOW ARE U?
top related