ΚΡΥΠΤΟΓΡΑΦΗΣΗ ΚΑΙ ΑΠΟΚΡΥΠΤΟΓΡΑΦΗΣΗ ΜΕ ΤΟ ΜΑΤΗΕΜΑΤΙca-...

5

Click here to load reader

Upload: mihalis-nikolaou

Post on 28-Jul-2015

236 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ΚΡΥΠΤΟΓΡΑΦΗΣΗ ΚΑΙ ΑΠΟΚΡΥΠΤΟΓΡΑΦΗΣΗ ΜΕ ΤΟ ΜΑΤΗΕΜΑΤΙCA- ΜΙΧΑΛΗΣ ΝΙΚΟΛΑΟΥ

ΚΡΥΠΤΟΓΡΑΦΗΣΗ ΚΑΙ ΑΠΟΚΡΥΠΤΟΓΡΑΦΗΣΗ

ΜΕ ΤΟ ΜΑΤΗΕMATICA

ΜΙΧΑΛΗΣ ΝΙΚΟΛΑΟΥ

Page 2: ΚΡΥΠΤΟΓΡΑΦΗΣΗ ΚΑΙ ΑΠΟΚΡΥΠΤΟΓΡΑΦΗΣΗ ΜΕ ΤΟ ΜΑΤΗΕΜΑΤΙCA- ΜΙΧΑΛΗΣ ΝΙΚΟΛΑΟΥ

ΜΙΧΑΛΗΣ ΝΙΚΟΛΑΟΥ 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]];

Page 3: ΚΡΥΠΤΟΓΡΑΦΗΣΗ ΚΑΙ ΑΠΟΚΡΥΠΤΟΓΡΑΦΗΣΗ ΜΕ ΤΟ ΜΑΤΗΕΜΑΤΙCA- ΜΙΧΑΛΗΣ ΝΙΚΟΛΑΟΥ

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. Συγκεκριμένα ....

Page 4: ΚΡΥΠΤΟΓΡΑΦΗΣΗ ΚΑΙ ΑΠΟΚΡΥΠΤΟΓΡΑΦΗΣΗ ΜΕ ΤΟ ΜΑΤΗΕΜΑΤΙCA- ΜΙΧΑΛΗΣ ΝΙΚΟΛΑΟΥ

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

Page 5: ΚΡΥΠΤΟΓΡΑΦΗΣΗ ΚΑΙ ΑΠΟΚΡΥΠΤΟΓΡΑΦΗΣΗ ΜΕ ΤΟ ΜΑΤΗΕΜΑΤΙCA- ΜΙΧΑΛΗΣ ΝΙΚΟΛΑΟΥ

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?