Title: [C++] Άσκηση 6 - 2015/2016 Προθεσμία 24/11/2015 12:00 πμ Post by: Vlassis on November 14, 2015, 12:41:39 pm Κληρονομικότητα ΙΙ: Κρυπτογράφηση
Δίνεται η ακόλουθη Abstract Class Crypto και οι κλάσεις Cesar και XOR που κληρονομούν την Crypto. Class Crypto{ protected: string Message; string Encrypted; string Decrypted; public: string virtual Encryption ()=0; string virtual Decryption ()=0; Crypto(string msg); string getMessage(); void setMessage(); string getEncrypted(); string getDecrypted(); } Class Cesar: public Crypto{ } Class XOR: public Crypto{ } Να υλοποιηθούν όλες οι μέθοδοι ώστε να λειτουργεί η ακόλουθη main main() { Cesar c_enc(“hello”); c_enc. Encryption(); string resEncCes=c_enc.getEncrypted(); coutn<<resEncCes;<<endl; c_enc.Decryption() cout<<c_end.getDecrypted(); XOR x_enc(“hello”); x_enc.Encryption(); string resEncXOR=c_enc.getEncrypted(); coutn<<resEncXOR;<<endl; x_enc.Decryption() cout<<x_end.getDecrypted(); } Ο αλγόριθμος του Cesar λειτουργεί ως εξής: Ας θεωρήσουμε ένα μήνυμα m ως είσοδο στον αλγόριθμο. Το κάθε σύμβολο (χαρακατήρας) του αρχικού μηνύματος αντικαθίσταται από ένα νέο σύμβολο (χαρακτήρα) ο οποίος προκύπτιε από το αρχικό σύμβολο + ν θέσεις στο αρχικό. Δηλαδή εαν το ν είναι 1 και το μήνυμα είναι ABCD τότε το κρυπτογραφημμένο μήνυμα θα είναι BCDE. Η αποκρυπτογράφηση θα γίνεται με την αντίστροφη διαδικασία. Στην περίπτωση του XOR η κρυπτoγράφηση βασίζεται στην πράξη του XOR μεταξύ δύο bit. Συνοπτικά ως είσοδος λαμβάνεται το μήνυμα και ένα μυστικό κλειδί τα οποία τα συνδιάζουμε για να γίνει η κρυπτογράφηση. Για την πράξη της κρυπτογράφησης χρησιμοποιούμε τον τελεστή XOR (^) μεταξύ του μηνύματος και του κλειδιού. Δηλαδή εαν το μήνυμα μας είναι το “abc” και το κλειδί μας είναι το 'c' τότε θα κάνουμε κάθε χαρακτήρα του μηνύματος XOR με το χαρακτήρα 'c'. Δηλαδή το XOR(a,c)=a^c, XOR(b,c) κ.ο.κ. Θεωρείστε στη συγκεκριμένη περίπτωση ότι το κλειδί μπορεί να είναι ένα μόνος χαρακτήρας. Oποιαδήποτε επιπλεόν μεταβλητη χρειάζεστε θα πρέπει να την ορίσετε και για την περίπτωση του Cesar και του XOR. Για παράδειγμα στην περίπτωση Cesar χρειάζεται να ορίσετε τον αριθμό n μετατώπισης ενώ στην XOR το αντίστοιχο κλειδί. Title: Re: [C++] Άσκηση F - 2015/2016 Προθεσμία 24/11/2015 12:00 πμ Post by: tpt on November 14, 2015, 20:00:48 pm παιδια υπαρχει περιπτωση να ξερει καποιος το εξης;
οταν εχω ενα string πως μπορω να διαβασω ενα προς ενα τους χαραχτηρες εχω κολλησει Title: Re: [C++] Άσκηση F - 2015/2016 Προθεσμία 24/11/2015 12:00 πμ Post by: Vlassis on November 14, 2015, 23:48:42 pm Code: ... Title: Re: [C++] Άσκηση F - 2015/2016 Προθεσμία 24/11/2015 12:00 πμ Post by: akyrosHM on November 17, 2015, 00:13:27 am Στον Caesar της main δεν έχει ορίσει το m. Το παίρνω αυθαίρετα 1, έχοντας στην κλάση μου υλοποιήσεις για διαφορετικά m;
Title: Re: [C++] Άσκηση F - 2015/2016 Προθεσμία 24/11/2015 12:00 πμ Post by: Apostolof on November 17, 2015, 01:38:01 am ... Ο αλγόριθμος του Cesar λειτουργεί ως εξής: Ας θεωρήσουμε ένα μήνυμα m ως είσοδο στον αλγόριθμο. Το κάθε σύμβολο (χαρακατήρας) του αρχικού μηνύματος αντικαθίσταται από ένα νέο σύμβολο (χαρακτήρα) ο οποίος προκύπτιε από το αρχικό σύμβολο + ν θέσεις στο αρχικό. ... Στον Caesar της main δεν έχει ορίσει το m. Το παίρνω αυθαίρετα 1, έχοντας στην κλάση μου υλοποιήσεις για διαφορετικά m; Νομίζω το m είναι το string Message που στην υλοποίηση της main παίρνει τη τιμή "Hello". Αν εννοείς το ν, τότε ναι, μάλλον θέλει να του δώσεις κάποια τυχαία τιμή όπως λέει στο τέλος: Για παράδειγμα στην περίπτωση Cesar χρειάζεται να ορίσετε τον αριθμό n μετατώπισης ενώ στην XOR το αντίστοιχο κλειδί. Title: Re: [C++] Άσκηση F - 2015/2016 Προθεσμία 24/11/2015 12:00 πμ Post by: Apostolof on November 17, 2015, 14:33:01 pm Δεύτερη ερώτηση. Στην XOR αναφέρεται και σε τελεστή. Θέλει να του φτιάξουμε και operator; Επίσης στην περίπτωση πχ. του XOR(a,a) βάζω σε εκείνη τη θέση τι; 0; Όχι δε χρειάζεται να φτιάξεις κάτι, ο τελεστής xor υπάρχει έτοιμος στη c++. https://msdn.microsoft.com/en-us/library/3akey979.aspx Επίσης ο τελεστής σου επιτρέπει τη πράξη char XOR char γράφοντας απλά: Code: char a,b,c; Ίσως σου φανεί χρήσιμο αυτό: http://www.cplusplus.com/forum/articles/38516/ Title: Re: [C++] Άσκηση F - 2015/2016 Προθεσμία 24/11/2015 12:00 πμ Post by: Schro on November 22, 2015, 19:43:55 pm Οπότε στην Ceasar το κλειδί της κρυπτογράφησης (πόσες θέσεις θα μετατοπιστούν) το βάζουμε εμείς αυθαίρετα;
Title: Re: [C++] Άσκηση F - 2015/2016 Προθεσμία 24/11/2015 12:00 πμ Post by: Pest on November 22, 2015, 20:52:31 pm Οπότε στην Ceasar το κλειδί της κρυπτογράφησης (πόσες θέσεις θα μετατοπιστούν) το βάζουμε εμείς αυθαίρετα; Ναι δεν ειναι συγκεκριμενο. Παιδια οταν μου βγαζει μηνυμα 'string' does not name a type τι λαθος εχω κανει; σε μια συναρτηση μου το βγαζει. Title: Re: [C++] Άσκηση F - 2015/2016 Προθεσμία 24/11/2015 12:00 πμ Post by: vaiokons on November 22, 2015, 21:33:57 pm Οπότε στην Ceasar το κλειδί της κρυπτογράφησης (πόσες θέσεις θα μετατοπιστούν) το βάζουμε εμείς αυθαίρετα; Ναι δεν ειναι συγκεκριμενο. Παιδια οταν μου βγαζει μηνυμα 'string' does not name a type τι λαθος εχω κανει; σε μια συναρτηση μου το βγαζει. Title: Re: [C++] Άσκηση F - 2015/2016 Προθεσμία 24/11/2015 12:00 πμ Post by: Schro on November 22, 2015, 23:31:43 pm στην XOR το κρυπτογραφημένο μήνυμα πρέπει να αποτελείται μόνο απο χαρακτήρες;
Title: Re: [C++] Άσκηση F - 2015/2016 Προθεσμία 24/11/2015 12:00 πμ Post by: zwitsa on November 22, 2015, 23:40:13 pm έδωσε μήπως κάποιο hint για το πως προσθέτουμε ν γράμματα ή θέλει να πεθάνουμε στο γκουγκλ πάλι;
Title: Re: [C++] Άσκηση F - 2015/2016 Προθεσμία 24/11/2015 12:00 πμ Post by: Apostolof on November 23, 2015, 00:21:09 am στην XOR το κρυπτογραφημένο μήνυμα πρέπει να αποτελείται μόνο απο χαρακτήρες; Όχι, μπορείς για παράδειγμα να κάνεις Code: XOR x_enc("hello185 a45"); έδωσε μήπως κάποιο hint για το πως προσθέτουμε ν γράμματα ή θέλει να πεθάνουμε στο γκουγκλ πάλι; Όχι δεν έδωσε, αλλά δε χρειάζεται κιόλας. Χρησιμοποιείς απλά τη πράξη της πρόσθεσης. Πχ το 'a' + 1; δίνει b. Title: Re: [C++] Άσκηση F - 2015/2016 Προθεσμία 24/11/2015 12:00 πμ Post by: geopas on November 23, 2015, 00:35:10 am στην XOR το κρυπτογραφημένο μήνυμα πρέπει να αποτελείται μόνο απο χαρακτήρες; Όχι, μπορείς για παράδειγμα να κάνεις Code: XOR x_enc("hello185 a45"); έδωσε μήπως κάποιο hint για το πως προσθέτουμε ν γράμματα ή θέλει να πεθάνουμε στο γκουγκλ πάλι; Όχι δεν έδωσε, αλλά δε χρειάζεται κιόλας. Χρησιμοποιείς απλά τη πράξη της πρόσθεσης. Πχ το 'a' + 1; δίνει b. Title: Re: [C++] Άσκηση F - 2015/2016 Προθεσμία 24/11/2015 12:00 πμ Post by: Apostolof on November 23, 2015, 00:45:42 am ... Aυτο το τελευταιο ισχυει σιγουρα,λιγο μπακαλικο μου φαινεται οι κωδικοι σε ASCII να ειναι συνεχομενοι για τα γραμματα.Επισης αμα περασεις το Ζ τι γινεται;Εγώ έτσι το έκανα και λειτουργεί. Επίσης έχει το θετικό ότι όταν φτάνει στο τέλος των χαρακτήρων (δεν πάει μόνο μέχρι το Ζ έχει και κάτι άλλα) κάνει rewind και όχι overflow. Για αυτό δεν είμαι 100% σίγουρος (κάπου νμζ το διάβασα) πάντως με 50000000 που το δοκίμασα λειτουργεί. Title: Re: [C++] Άσκηση F - 2015/2016 Προθεσμία 24/11/2015 12:00 πμ Post by: Schro on November 23, 2015, 01:10:59 am κι εμένα λειτουργεί (δηλαδή κάνει κρυπτογράφηση και αποκρυπτογράφηση κανονικά) και με ακραία νούμερα, απλά το Encrypted όταν το εκτυπώνω δεν αποτελείται μόνο απο γράμματα, αλλά έχει και σύμβολα μέσα. αυτό φαντάζομαι δεν είναι πρόβλημα εφ'όσον γίνονται σωστά οι διαδικασίες (απο)κρυπτογράφησης, έτσι;
Title: Re: [C++] Άσκηση F - 2015/2016 Προθεσμία 24/11/2015 12:00 πμ Post by: Apostolof on November 23, 2015, 01:35:42 am κι εμένα λειτουργεί (δηλαδή κάνει κρυπτογράφηση και αποκρυπτογράφηση κανονικά) και με ακραία νούμερα, απλά το Encrypted όταν το εκτυπώνω δεν αποτελείται μόνο απο γράμματα, αλλά έχει και σύμβολα μέσα. αυτό φαντάζομαι δεν είναι πρόβλημα εφ'όσον γίνονται σωστά οι διαδικασίες (απο)κρυπτογράφησης, έτσι; Και εμένα κάτι άκυρα σύμβολα μου βγάζει. Συγκεκριμένα με το 500 μου βγάζει αυτό: http://s6.postimg.org/olgremust/dfgj.png μπορείς να τσεκάρεις λίγο αν σου βγάζει το ίδιο; Title: Re: [C++] Άσκηση F - 2015/2016 Προθεσμία 24/11/2015 12:00 πμ Post by: Schro on November 23, 2015, 02:52:40 am κι εμένα λειτουργεί (δηλαδή κάνει κρυπτογράφηση και αποκρυπτογράφηση κανονικά) και με ακραία νούμερα, απλά το Encrypted όταν το εκτυπώνω δεν αποτελείται μόνο απο γράμματα, αλλά έχει και σύμβολα μέσα. αυτό φαντάζομαι δεν είναι πρόβλημα εφ'όσον γίνονται σωστά οι διαδικασίες (απο)κρυπτογράφησης, έτσι; Και εμένα κάτι άκυρα σύμβολα μου βγάζει. Συγκεκριμένα με το 500 μου βγάζει αυτό: http://s6.postimg.org/olgremust/dfgj.png μπορείς να τσεκάρεις λίγο αν σου βγάζει το ίδιο; Ναι στα ίδια είμαστε! ;) |