Προς το περιεχόμενο

Πρόγραμμα κρυπτογράφησης σε Java


nazgul

Προτεινόμενες αναρτήσεις

Δημοσ.

Λοιπόν έχω να φτιάξω ένα πρόγραμμα κρυπτογράφησης και το πρόβλημα μου δεν σχετίζεται τόσο με τη γλώσσα που θα το γράψω όσο με τη λογική του αλγόριθμου του. Λοιπόν έχουμε και λέμε:

 

Ι) Κωδικοποιύμε τον πρώτο χαρακτήρα με βάση τον τακτικό του αριθμό στο σύστημα ASCII

 

ΙΙ) Κωδικοποιούμε τους επόμενους χαρακτήρες προσθέτοντας τον δικό τους τακτικό αριθμό με αυτόν του αμέσως προηγούμενου χαρακτήρα και κατόπιν υπολογίζουμε το υπόλοιπο της διαίρεσης τους δια μια σταθερά που είναι το κλειδί της κρυπτογράφησης(δηλ. εκτελούμε την πράξη athroisma % key και το αποτέλεσμα είναι ο κωδικός κρυπτογράφησης του χαρακτήρα).

 

Για παράδειγμα αν οι τακτικοί αριθμοί των 2 πρώτων χαρακτήρων είναι 100 και 255 αντίστοιχα και το κλειδί μας έχει την τιμή 300 το κωδικοποιημένο μήνυμα θα αρχίζει με:

 

100, (255 + 100) % 300 = 55

 

Άντε και κάνουμε την κρυπτογράφηση. Αυτή την καταραμένη την αποκρυπτογράφηση πώς την κάνουμε; Ο διαιρεταίος μας δίνεται από την σχέση Δ=δ*π+υ (στο δημοτικό έτσι το είχα μάθει!). Έλα όμως που στην προκειμένη περίπτωση δεν γνωρίζουμε το πηλίκο. Εδώ πρέπει να σημειώσω πως τα προγραμμάτα κρυπτογράφησης και αποκρυπτογράφησης είναι διαφορετικά, δηλ. ένα πρόγραμμα κάνει την κρυπτογράφηση και ένα άλλο κάνει την αποκρυπτογράφηση.

 

Καμιά ιδέα παιδιά;

Δημοσ.

Basei koinhws logikhs:

sto ari8mhtiko paradeigma pou exeis: estw oti o deyteros xarakthras exei ASCII code x, tote: 100+x=300*phliko + 55, opote:x=300*phliko-45. Frattoume:

0<=x<=255 -> 45<=300*phliko<=300 -> phliko akeraios, ara phliko=1.

Ara, x=255. Sunexizeis me tous upoloipous xarakthres me ton idio tropo.

Dystyxws omws h apokwdikopoihsh den odhgei se monoshmanth lush.

Δημοσ.

Εγώ προσωπικά θα το έκανα χρησιμοποιώντας την xor για να γυρνάει πιο εύκολα... αν παίξεις όμως με την modular τότε μπορείς να δεις σε ένα άλλο topic που έχω κάνει εδώ για κρυπτογράφηση... εκεί αναφέρω για τον RSA που χρησιμοποιεί αυτό που θέλεις να κάνεις και υπολογίζει το ανάστροφο mod την συνάρτησης χ^-1mod(n)... έτσι περιπλέκεις τα πράγματα...

Επίσης το άλλο που μπορείς να κάνεις είναι να βρεις ένα τρόπο με την xor να γυρνάς το άθροισμα ώστε στην επιστροφή να σου δίνει ακέραιο χωρίς υπόλοιπο...

Δημοσ.

Σίγουρα θα υπάρχει απλούστερος τρόπος! Τον τελεστή xor δεν το γνωρίζω καλά(νομίζω πως είναι ένα αντίθετο or;) αλλά σίγουρα το πρόγραμμα υλοποιείται και χωρίς αυτόν. Πρόκειται για μια εργασία που έχω στη σχολή και ο αλγόριθμος δεν πρόκειται να είναι τίποτα το ιδιαίτερο(κάτι σαν την μέθοδο κρυπτογράφησης που χρησιμοποιούσε ο Ιούλιος Καίσαρας) μιας και δε μαθαίνουμε πως να κρυπτογραφούμε αλλά πως να προγραμματίζουμε! Το RSA είναι πάρα πολύ περίπλοκο για την περίπτωση μου. Πάντως φοβερό το post σου!

Δημοσ.

Βασικά, τώρα κατάλαβα τι θες... (είμαι λίγο στόκος ώρες-ώρες...)

 

Λοιπόν, είναι πολύ απλή η αναστροφή... δες τι γίνεται... ο τελεστής % είναι στην ουσία η πράξη περιστροφής της Modular algebra, δηλάδη περιστρέφει έναν αριθμό γύρο από ένα σταθερό... π.χ. 100mod300=100, 250mod300=250 και (100+250)mod300=50, όπως ακριβώς το είπες και εσύ...

Για να γυρίσεις τώρα κάνεις το εξής... Δεδομένου ότι ξέρεις πάντα τον πρώτο αριθμό που είναι το 100, σύμφωνα με το παραδειγμά σου και δεδομένου του κλειδιού σου (300) και του κρυπτογραφημένου που είναι 50 ψάχνεις το εξής...: (100+x)mod300=50... Αυτό είναι πολύ απλά x=300+50-100=250...

Αν δεν κατάλαβες πως έγινε αυτό, σκέψου ότι αφού έχουμε περιστροφή γύρο από το 300 (δηλαδή % ή mod), τότε αφού το αποτέλεσμα είναι 50, ξέρουμε ότι περιστράφηκε κάποιες φορές και έδωσε έξτρα άλλα 50... οπότε αφού ξέρουμε τον πρώτο αθροιστή προσθέτουμε το αποτέλεσμα στην σταθερά περιστροφής και αφαιρούμε τον δεδομένο αθροιστή...

Άλλο παράδειγμα είναι (230+500)%300=730%300=130... Άρα x=300+130-500=-70 το οποίο ενώ φαίνεται λίγο κουλό το παίρνεις και το κάνεις x'=300+x=300-70=230 και το βρήκες... Αυτό συμβαίνει μόνο όταν οι περιστροφές του αθροίσματος είναι περισσότερες από μια, σε όλες τις άλλες περιπτώσεις ισχύει το πρώτο...

Γενικά... (y+x)%n=e τότε x=n+e-y (όταν η περιστροφή είναι μία ή e>0)

ή x=w*n+e-y (όταν e<0 και όπου w o μικρότερος ακέραιος αριθμός έτσι ώστε το e να βγαίνει θετικό)...

Ελπίζω να μην τα μπέρδεψα κάπου... :shock:

Δημοσ.

Φίλε Jaco αισθάνομαι μια ακατανίκητη ορμή να σε φιλήσω :D :D !

 

Αυτήν ακριβώς τη λύση έψαχνα. Για τη μια περιστροφή που έλεγες τη λύση την είχα βρει(αφού σκεφτόμουνα να ορίσω σαν κλειδί κάποιον μεγάλο αριθμό όπως το 100000 για να παραμείνω πάντα στη μία περιστροφή όπως το λες και να μπορώ να υπολογίζω τον προηγούμενο όρο με μια απλή αφαίρεση. Απαράδεκτη λύση βέβαια αν σκεφτεί κανείς πως η διαδικασία της αποκρυπτογράφησης δεν χρησιμοποιεί καν το κλειδι για να σχηματίσει το αρχικό μήνυμα! Πάντως θα ήταν καινοτόμο :lol: ). Το πρόβλημα ήταν με τις πολλές περιστροφές. Πάντως δεν είχα συλλάβει ποτέ τον όρο mod σαν περιστροφή ενός αριθμού γύρω από έναν άλλο. Όλα τα βιβλία προγραμματισμού τον αναφέρουν ως έναν τελεστή που δίνει το υπόλοιπο μιας διαίρεσης μεταξύ ακεραίων(βέβαια το κουλό είναι πως δίνει και το υπόλοιπο σε περιπτώσεις που οι αριθμοί είναι float ή double. Δεν είχα σκεφτεί ποτέ ότι μπορεί μια διαίρεση μεταξύ δεκαδικών να έχει υπόλοιπο...)

 

Anyway, σε ευχαριστώ πάρα πολύ γιατί τα μαθηματικά μου είναι λίγο σκουριασμένα και στάσιμα στο επίπεδο της Δ' δέσμης του Λυκείου(κοινώς είμαι ψιλοσκράπας :D ).

Δημοσ.

Αν το w είναι μεγαλύτερο του μικρότερου ακέραιου που δίνει e>0, τότε το x θα είναι μεγαλύτερο του πραγματικού κατά n...

Για παράδειγμα...:

το πραγματικό είναι x=w*n+e-y, οπότε αντικαθιστώντας του συντελεστές σύμφωνα με το παράδειγμα που το x ήταν 100, y=250, n=300 και e=50, θα έχουμε

 

x=1*300+50-250=100, το οποίο είναι και σωστό...

 

Αν όμως βάλουμε w=2, τότε γίνεται...

 

x=2*300+50-250=400, το οποίο είναι n=300 μεγαλύτερο του πραγματικού x...

 

Μόνο αν κάνεις το αποτέλεσμα αυτό mod θα βγει σωστό, γιατί είναι γραμμική η διαδικασία, δηλαδή 400mod300=100... Αλλά αυτό σημαίνει μια πράξη παραπάνω που δεν χρειάζεται να γίνει και δεν υπάρχει λόγος να μπλεχτεί η mod στην αναστροφή... :D

 

Nazgul, αν θες να το μπερδέψεις λίγο το πράγμα βάλε και την xor... όσο για το φιλί, μη με βάζεις σε πειρασμό...!!! :lol:

  • 7 μήνες μετά...
Δημοσ.

Kala ola auta pou lete peri algorithmon kai genika peri sugkekrimenis

taktikis pou prepei na akolouthithei gia thn dhmiorgia enos algorithmou

kruptografisis.

Apla tha ithela kai ego na po tin mikri mou gnomi anaforika me auta.

Oso periplokos kai na einai o algorithmos pou tha skeftheitai, to diavasma kapoion kalon arthron peri kruptografias me exei diad3ei oti , ean o algorithmos den periexei kapoia sugkekrimena e3upna mathimatika trikakia tote me tin brute - force texniki einai katadikasmenos na spasei.

Eite apofasisete na kanete XOR kapoies times-metablites , eite diaireseis klp klp, ola auta spane!.

Uparxoun sugkekrimenes kruptanalutikes methodoi tis opoies efarmozi kaneis pano se ena agnosto ciphertext, kai otan prokeitai gia erasitexniko encryption, spaei....

 

Enas kalos algorithmos encryption prepei na sunduazei theoria arithmon,

pinakes,antistrofes pinakon, xronoe3artomenous pinakes..klp.

 

MindControl.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...