THMMY.gr

Μαθήματα Βασικού Κύκλου => Αντικειμενοστραφής Προγραμματισμός => Topic started by: Mr K on November 22, 2012, 20:31:07 pm



Title: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: Mr K on November 22, 2012, 20:31:07 pm
Άσκηση C
Για την κρυπτογράφηση μιας ομάδας δεδομένων που βρίσκεται στη μνήμη του υπολογιστή ακολουθείται η εξής διαδικασία. Δημιουργείται ένα κλειδί που αποτελείται από τυχαίους αριθμούς τύπου usngned char σε μήκος ίσο με τον αριθμό των bytes της ομάδας που πρόκειται να κρυπτογραφηθεί. Tα bytes της ομάδας διαβάζονται ως αριθμοί τύπου usngned char και οι τιμές τους αντικαθίστανται από τις τιμές που προκύπτουν από τη σχέση (text [ ι ]+key [ i ])%256. Όπου text [ i ] η τιμή του i byte της ομάδας που κρυπτογραφείται και key [ i ] η τιμή του byte που βρίσκεται στην ίδια θέση στο κλειδί. Η αποκρυπτογράφηση γίνεται αντικαθιστώντας την τιμή του byte που βρίσκεται στην i θέση του κρυπτογραφήματος με την τιμή (crypt [ i ] – key [ i ]+256)%256.  Όπου crypt [ i ] η τιμή του i byte του κρυπτογραφήματος και key[ i ] η τιμή του byte που βρίσκεται στην ίδια θέση στο κλειδί.(Κρυπτογράφηση Vernam).
 Στην πράξη το κλειδί μπορεί να δημιουργηθεί χρησιμοποιώντας μια ρουτίνα παραγωγής ψευδοτυχαίων αριθμών εισάγοντας, ως σπόρο, ένα μυστικό αριθμό (Περίπτωση Α). Για μεγαλύτερη ασφάλεια χρησιμοποιούνται κλειδιά που σχηματίζονται από πραγματικά τυχαίους αριθμός.(Περίπτωση Β)
Να γραφεί το λογισμικό στο οποίο ορίζεται η κλάση signal η οποία υλοποιεί ένα σήμα το κείμενου του οποίου πρόκειται να κρυπτογραφηθεί. Στην κλάση να ορίζονται δύο συναρτήσεις αρχικών συνθηκών από τις οποίες η πρώτη να δέχεται ως όρισμα έναν ακέραιο ο οποίος να δηλώνει τον αριθμό των bytes του κειμένου που πρόκειται να κρυπτογραφηθεί. Η συνάρτηση να δεσμεύει δυναμικά μνήμη για την καταχώρηση του κειμένου και να διαβάζει τους αντίστοιχους χαρακτήρες. Η δεύτερη συνάρτηση να δέχεται ως ορίσματα έναν ακέραιο που θα δηλώνει τον αριθμό των bytes του κειμένου που θα κρυπτογραφηθεί  και έναν pointer σε στοιχεία τύπου unsigned char ο οποίος να δείχνει τη διεύθυνση της περιοχής όπου βρίσκονται το κείμενο.
Στο λογισμικό να οριστεί και η κλάση skey η οποία να υλοποιεί ένα κλειδί. Στην κλάση να ορίζονται δύο συναρτήσεις αρχικών συνθηκών από τις οποίες η πρώτη να δέχεται ως ορίσματα δύο ακεραίους αριθμούς από τους οποίους, ο πρώτος να δηλώνει το μήκος του κλειδιού και ο δεύτερος να ορίζει τον σπόρο που θα χρησιμοποιηθεί για την παραγωγή της σειράς ψευδοτυχαίων αριθμών που θα αποτελέσουν το κλειδί (Περίπτωση Α). Για την παραγωγή των τυχαίων αριθμών να χρησιμοποιηθούν οι συναρτήσεις srand() και rand() ή αντίστοιχες της βιβλιοθήκης του μεταγλωττιστεί που θα χρησιμοποιήσετε. Η δεύτερη συνάρτηση αρχικών συνθηκών να δέχεται, ως ορίσματα, έναν ακέραιο που να δηλώνει το μήκος του κλειδιού και έναν pointer, σε στοιχεία τύπου unsigned char, ο οποίος να δείχνει τη διεύθυνση της περιοχής όπου βρίσκεται καταχωρημένο το κλειδί (Περίπτωση Β)..
Στο λογισμικό να οριστεί ακόμη η κλάση broadcast, ως public παραγόμενη από τις κλάσεις signal και skey, η οποία να υλοποιεί τη διαδικασία κρυπτογράφησης και αποκρυπτογράφησης ενός μηνύματος. Στην κλάση να οριστεί η συνάρτηση coding() η οποία να κρυπτογραφεί το κείμενο που ορίστηκε από την κλάση signal χρησιμοποιώντας το κλειδί που όρισε η κλάση skey. Η συνάρτηση να  επιστρέφει έναν pointer σε στοιχεία τύπου unsigned char ο οποίος να δείχνει στην περιοχή όπου έχει καταχωρηθεί το κρυπτογράφημα. Στην κλάση να οριστεί ακόμη και η συνάρτηση decoding() η οποία να αποκρυπτογραφεί το κρυπτογράφημα που προέκυψε από τη συνάρτηση coding(). Η συνάρτηση να επιστρέφει έναν pointer σε στοιχεία τύπου unsigned char ο οποίος να δείχνει στην περιοχή όπου έχει καταχωρηθεί το κείμενο που αποκρυπτογραφήθηκε.
Η συνάρτηση main() του προγράμματος να εμφανίζει ένα μενού από το οποίο να επιλέγεται η διαδικασία κρυπτογράφησης ή η διαδικασία αποκρυπτογράφησης. Στη συνέχεια ένα νέο μενού να επιτρέπει να διαλέξουμε με ποιόν τρόπο θέλουμε να εισάγουμε το κείμενο και να δημιουργήσουμε το κλειδί με το οποίο θα το κρυπτογραφήσουμε. Αντίστοιχες επιλογές να έχουμε στην περίπτωση της αποκρυπτογράφησης. Το πρόγραμμα σε κάθε περίπτωση να εμφανίζει το κρυπτογράφημα ή το κείμενο που αποκρυπτογραφήθηκε.
 
Βοηθητικές παρατηρήσεις:
Επειδή κατά την κρυπτογράφηση μπορεί να προκύψουν χαρακτήρες που δεν εμφανίζονται στην οθόνη για την εκτύπωση ή την εισαγωγή του κρυπτογραφήματος να χρησιμοποιούνται οι αντίστοιχοι ASCII κωδικοί.
Οι αριθμοί που αποτελούν το κλειδί πρέπει να είναι ακέραιοι στο διάστημα [0,255].
Οι συναρτήσεις αρχικών συνθηκών της κλάσης signal διακρίνουν δύο περιπτώσεις για την εισαγωγή του κειμένου που θα κρυπτογραφηθεί. Η πρώτη περίπτωση, όπου η συνάρτηση αρχικών συνθηκών δέχεται ένα όρισμα, αφορά την εισαγωγή ενός μικρού μηνύματος την ώρα της κρυπτογράφησης. Στη δεύτερη περίπτωση όπου, ως όρισμα η συνάρτηση αρχικών συνθηκών δέχεται έναν pointer, αφορά την εισαγωγή δεδομένων τα οποία μπορεί να αποτελούν το περιεχόμενο ενός αρχείου το οποίο θέλουμε να κρυπτογραφήσουμε. Για τη συγκεκριμένη άσκηση να εισάγεται αυτές τις τιμές από το πληκτρολόγιο.


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: Panos_Kanel on November 23, 2012, 03:18:14 am
έχω γράψει class broadcast: public signal, public skey{
}
αλλά το πρόβλημα είναι οτι για κάποιο λόγο μετά δε μου δίνει access στις public συναρτήσεις της signal μέσω της broadcast..για την skey μου δίνει...ξέρει κανείς τι λάθος παίζει να χω κάνει ;


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: Luffy on November 23, 2012, 13:33:22 pm
Νταξ... Λιγο υπερβολη με φαινεται..


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: c0ndemn3d on November 23, 2012, 15:01:09 pm
(crypt – key+256)%256

γιατί όχι (crypt – key)%256;


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: ΚΗΜΜΥ on November 23, 2012, 15:06:38 pm
Χωρις να το εχω δει φανταζομαι για το προσημο πηλικου/υπολοιπου?

κλαιν, αφου με το 256 διαιρεις :P


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: c0ndemn3d on November 23, 2012, 22:49:57 pm
(crypt – key+256)%256

γιατί όχι (crypt – key)%256;

το 'πιασα


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: thanospr on November 24, 2012, 15:53:29 pm
 Γiα την κλαση skey στην περιπτωση Α τι εννοει;Θα κανουμε μια επαναληψη και θα δημιουργουμε εμεις τυχαιους αριθμους;


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: Exomag on November 24, 2012, 16:40:58 pm
Γiα την κλαση skey στην περιπτωση Α τι εννοει;Θα κανουμε μια επαναληψη και θα δημιουργουμε εμεις τυχαιους αριθμους;

Η κλάση skey θα δέχεται (μέσω του constructor της) ένα seed (ουσιαστικά έναν int, δηλαδή, που θα εισάγει ο χρήστης), και μέσω του οποίου seed, χρησιμοποιώντας τις συναρτήσεις srand() και rand(), θα δημιουργούνται ψευδοτυχαίοι αριθμοί για το κλειδί key.

Για περισσότερες λεπτομέρειες σχετικά με την παραγωγή ψευδοτυχαίων αριθμών: http://www.cplusplus.com/reference/cstdlib/rand/


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: thanospr on November 24, 2012, 17:17:47 pm
Για την περιπτωση Β δεν ισχυει αυτο ετσι?Δεν δινουμε κανενα int και παραγει μονο του καθε στοιχειο του πινακα key μεσω της srand().


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: Exomag on November 24, 2012, 19:20:44 pm
Για την περιπτωση Β δεν ισχυει αυτο ετσι?Δεν δινουμε κανενα int και παραγει μονο του καθε στοιχειο του πινακα key μεσω της srand().

Απ' ότι καταλαβαίνω εγώ, στην Β περίπτωση δε θα δώσει ο χρήστης το seed, αλλά θα δώσει κατευθείαν το key (αυτό θα γίνει μέσω του unsigned char pointer). Υποθέτω πως αυτό χρειάζεται κατά την αποκρυπτογράφηση. Ας με διορθώσει κάποιος αν κάνω λάθος...


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: bakeneko on November 24, 2012, 22:35:13 pm
Η κρυπτογράφηση αποκρυπτογράφηση δουλεύει σίγουρα..;;;; Έχω γράψει 2 γραμμές απλά για να το δοκιμάσω και με βγάζει άλλα ντ'άλλων...
Quote
int main(){
  unsigned char text, out;
  int key, text_int, secret, out_int;
  cin >> text;
  cin >> key;
  text_int = (int) text;
  secret = (text_int-key)%256;
  cout << secret << endl;
  out_int = (secret-key+256)%256;
  out = (unsigned char) out_int;
  cout << out;
}


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: thanospr on November 25, 2012, 15:03:47 pm
Δεν ξερω και εγω το εχω αυτο το προβλημμα.Αλλα οταν αλλαξα την εντολη  out_int = (secret-key+256)%256; με αυτην   out_int = (secret+key+256)%256; ολα δουλευαν ΟΚ.Μηπως εχει κανει οντως λαθος;


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: Eragon on November 25, 2012, 16:50:31 pm
Δεν ξερω και εγω το εχω αυτο το προβλημμα.Αλλα οταν αλλαξα την εντολη  out_int = (secret-key+256)%256; με αυτην   out_int = (secret+key+256)%256; ολα δουλευαν ΟΚ.Μηπως εχει κανει οντως λαθος;
+1


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: c0ndemn3d on November 25, 2012, 18:03:05 pm
Όχι, δεν έχει λάθος. Εμένα τουλάχιστον μου βγαίνει σωστά. Και αν ελέγξεις τον τύπο ως τύπο (κάνε ένα μικρό παράδειγμα στο χαρτί) θα δεις ότι όντως βγάζει νόημα. Ίσως βέβαια να εξαρτάται από την υλοποίησή σου.


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: Exomag on November 25, 2012, 18:37:26 pm
Όταν λέει:

Quote
Επειδή κατά την κρυπτογράφηση μπορεί να προκύψουν χαρακτήρες που δεν εμφανίζονται στην οθόνη για την εκτύπωση ή την εισαγωγή του κρυπτογραφήματος να χρησιμοποιούνται οι αντίστοιχοι ASCII κωδικοί.

εννοεί πως αν ο ASCII κωδικός οποιουδήποτε byte του κειμένου που έχει κρυπτογραφηθεί είναι εκτός του διαστήματος [65,90], τότε να τυπώνουμε τον ίδιο τον κωδικό ASCII αντί για το σύμβολο στο οποίο αντιστοιχεί?


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: c0ndemn3d on November 25, 2012, 18:39:56 pm
Ότι χαρακτήρας και να είναι, απλά τυπώνεις/εισάγεις ASCII κωδικό. Μπορεί να γίνει με type casting.



Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: Exomag on November 25, 2012, 18:45:16 pm
Ότι χαρακτήρας και να είναι, απλά τυπώνεις/εισάγεις ASCII κωδικό. Μπορεί να γίνει με type casting.

Οπότε αν ο ASCII κωδικός δεν αντιστοιχεί σε γράμμα της αλφάβητου, τότε θα το τυπώσω αφού το κάνω type-cast σε int? (όλα αυτά, αναφερόμενος σε κάθε byte του κειμένου ξεχωριστά)


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: c0ndemn3d on November 25, 2012, 18:58:08 pm
Ότι χαρακτήρας και να είναι, απλά τυπώνεις/εισάγεις ASCII κωδικό. Μπορεί να γίνει με type casting.

Οπότε αν ο ASCII κωδικός δεν αντιστοιχεί σε γράμμα της αλφάβητου, τότε θα το τυπώσω αφού το κάνω type-cast σε int? (όλα αυτά, αναφερόμενος σε κάθε byte του κειμένου ξεχωριστά)


Κάνεις type casting για όλους τους χαρακτήρες από ό,τι έχω καταλάβει, είτε είναι εμφανίσιμος είτε όχι.


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: bakeneko on November 25, 2012, 19:09:40 pm
Όχι, δεν έχει λάθος. Εμένα τουλάχιστον μου βγαίνει σωστά. Και αν ελέγξεις τον τύπο ως τύπο (κάνε ένα μικρό παράδειγμα στο χαρτί) θα δεις ότι όντως βγάζει νόημα. Ίσως βέβαια να εξαρτάται από την υλοποίησή σου.
Δεν το γράφεις κιόλας το παράδειγμα, γιατί και στο χαρτί δε μου βγαίνει :P


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: Eragon on November 25, 2012, 19:11:43 pm
Στο κομματι της αποκωδικοποιησης τι προτείνετε να γράψουμε?Να βαζεο ο χρηστης καποιο απο τα κρυπτογραφηματα που προεκυψαν προηγουμενως και ενα κλειδι και να παιρνει ενα μηνυμα αναλογα με το κλειδι?ειναι πολυ ασαφες νομιζω


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: Exomag on November 25, 2012, 19:12:23 pm
Ότι χαρακτήρας και να είναι, απλά τυπώνεις/εισάγεις ASCII κωδικό. Μπορεί να γίνει με type casting.
Οπότε αν ο ASCII κωδικός δεν αντιστοιχεί σε γράμμα της αλφάβητου, τότε θα το τυπώσω αφού το κάνω type-cast σε int? (όλα αυτά, αναφερόμενος σε κάθε byte του κειμένου ξεχωριστά)
Κάνεις type casting για όλους τους χαρακτήρες από ό,τι έχω καταλάβει, είτε είναι εμφανίσιμος είτε όχι.

Ναι, τώρα που το ξαναβλέπω έχεις δίκιο (πάλι με μπέρδεψε η σύνταξη του Κορτέση >:()


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: Exomag on November 25, 2012, 19:17:54 pm
Στο κομματι της αποκωδικοποιησης τι προτείνετε να γράψουμε?Να βαζεο ο χρηστης καποιο απο τα κρυπτογραφηματα που προεκυψαν προηγουμενως και ενα κλειδι και να παιρνει ενα μηνυμα αναλογα με το κλειδι?ειναι πολυ ασαφες νομιζω

Μια ιδέα (και την οποία υλοποίησα εγώ) είναι να εισάγει ο χρήστης το μήνυμα που θέλει να αποκωδικοποιηθεί, καθώς και το κλειδί με το οποίο θα γίνει η αποκωδικοποίηση.


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: Eragon on November 25, 2012, 19:19:32 pm
Στο κομματι της αποκωδικοποιησης τι προτείνετε να γράψουμε?Να βαζεο ο χρηστης καποιο απο τα κρυπτογραφηματα που προεκυψαν προηγουμενως και ενα κλειδι και να παιρνει ενα μηνυμα αναλογα με το κλειδι?ειναι πολυ ασαφες νομιζω

Μια ιδέα (και την οποία υλοποίησα εγώ) είναι να εισάγει ο χρήστης το μήνυμα που θέλει να αποκωδικοποιηθεί, καθώς και το κλειδί με το οποίο θα γίνει η αποκωδικοποίηση.
Το οποίο μήνυμα θα πρέπει να ειναι ενα απο αυτα που εχουν προηγουμενως κωδικοποιηθει,ε?


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: Exomag on November 25, 2012, 19:24:06 pm
Στο κομματι της αποκωδικοποιησης τι προτείνετε να γράψουμε?Να βαζεο ο χρηστης καποιο απο τα κρυπτογραφηματα που προεκυψαν προηγουμενως και ενα κλειδι και να παιρνει ενα μηνυμα αναλογα με το κλειδι?ειναι πολυ ασαφες νομιζω

Μια ιδέα (και την οποία υλοποίησα εγώ) είναι να εισάγει ο χρήστης το μήνυμα που θέλει να αποκωδικοποιηθεί, καθώς και το κλειδί με το οποίο θα γίνει η αποκωδικοποίηση.
Το οποίο μήνυμα θα πρέπει να ειναι ενα απο αυτα που εχουν προηγουμενως κωδικοποιηθει,ε?

Δεν έχει σημασία. Εγώ, για παράδειγμα, έχω βάλει το πρόγραμμα να υλοποιεί μόνο μία κρυπτογράφηση/αποκρυπτογράφηση.
Απ' ότι κατάλαβα, εσύ το έβαλες να λειτουργεί με ένα ατέρμων loop. Το αν θα αποκωδικοποιεί ένα μήνυμα που κωδικοποιήθηκε προηγουμένως δεν διευκρινίζεται στην εκφώνηση, οπότε κάνεις ότι θέλεις...


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: Eragon on November 25, 2012, 19:35:06 pm
Στο κομματι της αποκωδικοποιησης τι προτείνετε να γράψουμε?Να βαζεο ο χρηστης καποιο απο τα κρυπτογραφηματα που προεκυψαν προηγουμενως και ενα κλειδι και να παιρνει ενα μηνυμα αναλογα με το κλειδι?ειναι πολυ ασαφες νομιζω

Μια ιδέα (και την οποία υλοποίησα εγώ) είναι να εισάγει ο χρήστης το μήνυμα που θέλει να αποκωδικοποιηθεί, καθώς και το κλειδί με το οποίο θα γίνει η αποκωδικοποίηση.
Το οποίο μήνυμα θα πρέπει να ειναι ενα απο αυτα που εχουν προηγουμενως κωδικοποιηθει,ε?

Δεν έχει σημασία. Εγώ, για παράδειγμα, έχω βάλει το πρόγραμμα να υλοποιεί μόνο μία κρυπτογράφηση/αποκρυπτογράφηση.
Απ' ότι κατάλαβα, εσύ το έβαλες να λειτουργεί με ένα ατέρμων loop. Το αν θα αποκωδικοποιεί ένα μήνυμα που κωδικοποιήθηκε προηγουμένως δεν διευκρινίζεται στην εκφώνηση, οπότε κάνεις ότι θέλεις...
Ναι οκ καταλαβα


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: c0ndemn3d on November 25, 2012, 19:37:00 pm
Όχι, δεν έχει λάθος. Εμένα τουλάχιστον μου βγαίνει σωστά. Και αν ελέγξεις τον τύπο ως τύπο (κάνε ένα μικρό παράδειγμα στο χαρτί) θα δεις ότι όντως βγάζει νόημα. Ίσως βέβαια να εξαρτάται από την υλοποίησή σου.
Δεν το γράφεις κιόλας το παράδειγμα, γιατί και στο χαρτί δε μου βγαίνει :P

Βασικά εννοούσα κάτι απλουστευμένο. Έχεις έναν αριθμό πχ 253. προσθέτεις το κλειδί (πχ 10) παίρνεις 263.
άρα πάει 7 (mod 256). Μετά αν ξαναπροσθέσεις το 10 θα πάει 17...

Ενώ αν το κάνεις με το τύπο του κορτέση πάει (7 - 10 + 256) = 253


Στο κομματι της αποκωδικοποιησης τι προτείνετε να γράψουμε?Να βαζεο ο χρηστης καποιο απο τα κρυπτογραφηματα που προεκυψαν προηγουμενως και ενα κλειδι και να παιρνει ενα μηνυμα αναλογα με το κλειδι?ειναι πολυ ασαφες νομιζω

Βασικά υπάρχει σκέψου ένα μενού. Σου λέει τι θες να κάνεις; Άμα θες να κωδικοποιήσεις, δίνεις μήνυμα και στο κωδικοποιεί. Άμα θες να αποκωδικοποιήσεις, δίνεις μήνυμα και στο αποκωδικοποιεί.


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: Exomag on November 25, 2012, 19:38:10 pm
Όχι, δεν έχει λάθος. Εμένα τουλάχιστον μου βγαίνει σωστά. Και αν ελέγξεις τον τύπο ως τύπο (κάνε ένα μικρό παράδειγμα στο χαρτί) θα δεις ότι όντως βγάζει νόημα. Ίσως βέβαια να εξαρτάται από την υλοποίησή σου.
Δεν το γράφεις κιόλας το παράδειγμα, γιατί και στο χαρτί δε μου βγαίνει :P

Δες εδώ για ένα αναλυτικό παράδειγμα: http://en.wikipedia.org/wiki/One-time_pad#Example

ΥΣ: Το "+256" στον τύπο της αποκρυπτογράφησης δεν το υλοποιεί στο παραπάνω παράδειγμα, αλλά χρησιμεύει για να αποφευχθούν οι αρνητικοί αριθμοί στο αποτέλεσμα...


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: Eragon on November 25, 2012, 20:16:10 pm
Όχι, δεν έχει λάθος. Εμένα τουλάχιστον μου βγαίνει σωστά. Και αν ελέγξεις τον τύπο ως τύπο (κάνε ένα μικρό παράδειγμα στο χαρτί) θα δεις ότι όντως βγάζει νόημα. Ίσως βέβαια να εξαρτάται από την υλοποίησή σου.
Δεν το γράφεις κιόλας το παράδειγμα, γιατί και στο χαρτί δε μου βγαίνει :P

Βασικά εννοούσα κάτι απλουστευμένο. Έχεις έναν αριθμό πχ 253. προσθέτεις το κλειδί (πχ 10) παίρνεις 263.
άρα πάει 7 (mod 256). Μετά αν ξαναπροσθέσεις το 10 θα πάει 17...

Ενώ αν το κάνεις με το τύπο του κορτέση πάει (7 - 10 + 256) = 253


Στο κομματι της αποκωδικοποιησης τι προτείνετε να γράψουμε?Να βαζεο ο χρηστης καποιο απο τα κρυπτογραφηματα που προεκυψαν προηγουμενως και ενα κλειδι και να παιρνει ενα μηνυμα αναλογα με το κλειδι?ειναι πολυ ασαφες νομιζω

Βασικά υπάρχει σκέψου ένα μενού. Σου λέει τι θες να κάνεις; Άμα θες να κωδικοποιήσεις, δίνεις μήνυμα και στο κωδικοποιεί. Άμα θες να αποκωδικοποιήσεις, δίνεις μήνυμα και στο αποκωδικοποιεί.
Ναι αλλα στην αποκωδικοποιηση,ξερεις μονο το κρυπτογραφημενο και το κατα τη γνωμη σου κλειδι,αρα πώς θα χρησιμοποιησεις την decoding που ανηκει στην κλαση,χωρις να ορισεις ενα αντικειμενο της κλασης?


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: c0ndemn3d on November 25, 2012, 20:18:35 pm
Όχι, δεν έχει λάθος. Εμένα τουλάχιστον μου βγαίνει σωστά. Και αν ελέγξεις τον τύπο ως τύπο (κάνε ένα μικρό παράδειγμα στο χαρτί) θα δεις ότι όντως βγάζει νόημα. Ίσως βέβαια να εξαρτάται από την υλοποίησή σου.
Δεν το γράφεις κιόλας το παράδειγμα, γιατί και στο χαρτί δε μου βγαίνει :P

Βασικά εννοούσα κάτι απλουστευμένο. Έχεις έναν αριθμό πχ 253. προσθέτεις το κλειδί (πχ 10) παίρνεις 263.
άρα πάει 7 (mod 256). Μετά αν ξαναπροσθέσεις το 10 θα πάει 17...

Ενώ αν το κάνεις με το τύπο του κορτέση πάει (7 - 10 + 256) = 253


Στο κομματι της αποκωδικοποιησης τι προτείνετε να γράψουμε?Να βαζεο ο χρηστης καποιο απο τα κρυπτογραφηματα που προεκυψαν προηγουμενως και ενα κλειδι και να παιρνει ενα μηνυμα αναλογα με το κλειδι?ειναι πολυ ασαφες νομιζω

Βασικά υπάρχει σκέψου ένα μενού. Σου λέει τι θες να κάνεις; Άμα θες να κωδικοποιήσεις, δίνεις μήνυμα και στο κωδικοποιεί. Άμα θες να αποκωδικοποιήσεις, δίνεις μήνυμα και στο αποκωδικοποιεί.
Ναι αλλα στην αποκωδικοποιηση,ξερεις μονο το κρυπτογραφημενο και το κλειδι,αρα πώς θα χρησιμοποιησεις την decoding που ανηκει στην κλαση,χωρις να ορισεις ενα αντικειμενο της κλασης?

Μα κάθε φορά θα ορίζεις αντικείμενο τύπου broadcast.

Μάλλον δεν εκφράστηκα σωστά. Στην κλάση signal που ορίζεις θα μπαίνει το κείμενο που εισάγει ο χρήστης (είτε είναι κωδικοποιημένο είτε όχι). Από εκεί και πέρα ανάλογα με την επιλογή του χρήστη θα εκτελείς είτε την coding(), είτε την decoding().


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: Eragon on November 25, 2012, 20:22:22 pm
Όχι, δεν έχει λάθος. Εμένα τουλάχιστον μου βγαίνει σωστά. Και αν ελέγξεις τον τύπο ως τύπο (κάνε ένα μικρό παράδειγμα στο χαρτί) θα δεις ότι όντως βγάζει νόημα. Ίσως βέβαια να εξαρτάται από την υλοποίησή σου.
Δεν το γράφεις κιόλας το παράδειγμα, γιατί και στο χαρτί δε μου βγαίνει :P

Βασικά εννοούσα κάτι απλουστευμένο. Έχεις έναν αριθμό πχ 253. προσθέτεις το κλειδί (πχ 10) παίρνεις 263.
άρα πάει 7 (mod 256). Μετά αν ξαναπροσθέσεις το 10 θα πάει 17...

Ενώ αν το κάνεις με το τύπο του κορτέση πάει (7 - 10 + 256) = 253


Στο κομματι της αποκωδικοποιησης τι προτείνετε να γράψουμε?Να βαζεο ο χρηστης καποιο απο τα κρυπτογραφηματα που προεκυψαν προηγουμενως και ενα κλειδι και να παιρνει ενα μηνυμα αναλογα με το κλειδι?ειναι πολυ ασαφες νομιζω

Βασικά υπάρχει σκέψου ένα μενού. Σου λέει τι θες να κάνεις; Άμα θες να κωδικοποιήσεις, δίνεις μήνυμα και στο κωδικοποιεί. Άμα θες να αποκωδικοποιήσεις, δίνεις μήνυμα και στο αποκωδικοποιεί.
Ναι αλλα στην αποκωδικοποιηση,ξερεις μονο το κρυπτογραφημενο και το κλειδι,αρα πώς θα χρησιμοποιησεις την decoding που ανηκει στην κλαση,χωρις να ορισεις ενα αντικειμενο της κλασης?

Μα κάθε φορά θα ορίζεις αντικείμενο τύπου broadcast.

Μάλλον δεν εκφράστηκα σωστά. Στην κλάση signal που ορίζεις θα μπαίνει το κείμενο που εισάγει ο χρήστης (είτε είναι κωδικοποιημένο είτε όχι). Από εκεί και πέρα ανάλογα με την επιλογή του χρήστη θα εκτελείς είτε την coding(), είτε την decoding().
ωραια σκεψη.ευχαριστω


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: bakeneko on November 25, 2012, 20:45:54 pm
Όχι, δεν έχει λάθος. Εμένα τουλάχιστον μου βγαίνει σωστά. Και αν ελέγξεις τον τύπο ως τύπο (κάνε ένα μικρό παράδειγμα στο χαρτί) θα δεις ότι όντως βγάζει νόημα. Ίσως βέβαια να εξαρτάται από την υλοποίησή σου.
Δεν το γράφεις κιόλας το παράδειγμα, γιατί και στο χαρτί δε μου βγαίνει :P

Βασικά εννοούσα κάτι απλουστευμένο. Έχεις έναν αριθμό πχ 253. προσθέτεις το κλειδί (πχ 10) παίρνεις 263.
άρα πάει 7 (mod 256). Μετά αν ξαναπροσθέσεις το 10 θα πάει 17...

Ενώ αν το κάνεις με το τύπο του κορτέση πάει (7 - 10 + 256) = 253
Αυτό που λες είναι σωστό. Αλλά δε λέει αυτό στην εκφώνηση, άρα εμμέσως πλην σαφώς συμφωνούμε ότι η κωδικοποίηση-αποκωδικοποίηση ΔΕ δουλεύει έτσι όπως λέει στην εκφώνηση :P


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: thanospr on November 25, 2012, 20:50:32 pm
Ετσι.Στην εκφωνηση και τις δυο φορες αφαιρεις το κλειδι η διαβαζω λαθος εκφωνηση  :D .Απ οτι καταλαβα το δυσκολο ειναι να καταλαβουμε την εκφωνηση...


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: c0ndemn3d on November 25, 2012, 20:53:35 pm
Παιδιά είμαι καθυστερημένος.


Εγώ τόση ώρα δεν έβλεπα ότι έχει πλην και στην πρώτη έκφραση και νόμιζα λέγατε για τη δεύτερη.. Βρίστε με.

Υ.Γ. Θα το αλλάξω στο τόπικ γιατί είμαι 99% σίγουρος ότι η πρώτη έκφραση θέλει +


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: thanospr on November 25, 2012, 20:56:49 pm
Παιδιά είμαι καθυστερημένος.


Εγώ τόση ώρα δεν έβλεπα ότι έχει πλην και στην πρώτη έκφραση και νόμιζα λέγατε για τη δεύτερη.. Βρίστε με.

Υ.Γ. Θα το αλλάξω στο τόπικ γιατί είμαι 99% σίγουρος ότι η πρώτη έκφραση θέλει +
Μα και στο ETHMMY με πλην το εχει...Τι γινεται; ;D ;D
Ειτε στην πρωτη μπει το + ειτε στην δευτερη νομιζω το ιδιο ειναι.


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: c0ndemn3d on November 26, 2012, 15:20:18 pm
Παιδιά είμαι καθυστερημένος.


Εγώ τόση ώρα δεν έβλεπα ότι έχει πλην και στην πρώτη έκφραση και νόμιζα λέγατε για τη δεύτερη.. Βρίστε με.

Υ.Γ. Θα το αλλάξω στο τόπικ γιατί είμαι 99% σίγουρος ότι η πρώτη έκφραση θέλει +
Μα και στο ETHMMY με πλην το εχει...Τι γινεται; ;D ;D
Ειτε στην πρωτη μπει το + ειτε στην δευτερη νομιζω το ιδιο ειναι.

Όντως, αλλά ο τύπος μάλλον ήθελε το + στην πρώτη έκφραση, παρά στη δεύτερη, αφού στο δεύτερο ο Καρτάσης έχει βάλει "+256".


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: bakeneko on November 27, 2012, 18:08:22 pm
Κανά hint πως πληκτρολογούμε διεύθυνση/pointer από το τερματικό; Μόλις βάζω τιμή με βγάζει segmatation fault...


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: Exomag on November 27, 2012, 18:27:15 pm
Κανά hint πως πληκτρολογούμε διεύθυνση/pointer από το τερματικό; Μόλις βάζω τιμή με βγάζει segmatation fault...

Η εκφώνηση λέει:
Quote
Στη δεύτερη περίπτωση όπου, ως όρισμα η συνάρτηση αρχικών συνθηκών δέχεται έναν pointer, αφορά την εισαγωγή δεδομένων τα οποία μπορεί να αποτελούν το περιεχόμενο ενός αρχείου το οποίο θέλουμε να κρυπτογραφήσουμε. Για τη συγκεκριμένη άσκηση να εισάγεται αυτές τις τιμές από το πληκτρολόγιο.

Άρα δε θα χρειαστεί, και στην δεύτερη περίπτωση, να δώσεις κάποιο pointer. Θα δώσεις, και πάλι, το string του κειμένου που θα κρυπτογραγηθεί/αποκρυπτογραφηθεί...


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: johnnykost on November 28, 2012, 01:34:06 am
Έτσι όμως δε θα είναι το ίδιο με την πρώτη?


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: Exomag on November 28, 2012, 03:28:08 am
Έτσι όμως δε θα είναι το ίδιο με την πρώτη?

Πρακτικά ναι, αλλά εγώ αυτό καταλαβαίνει πως θελει, σύμφωνα με την παραπάνω σημείωση...


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: wthfck on November 28, 2012, 21:03:46 pm
Άσκηση C
Να γραφεί το λογισμικό στο οποίο ορίζεται η κλάση signal η οποία υλοποιεί ένα σήμα το κείμενου του οποίου πρόκειται να κρυπτογραφηθεί. Στην κλάση να ορίζονται δύο συναρτήσεις αρχικών συνθηκών από τις οποίες η πρώτη να δέχεται ως όρισμα έναν ακέραιο ο οποίος να δηλώνει τον αριθμό των bytes του κειμένου που πρόκειται να κρυπτογραφηθεί. Η συνάρτηση να δεσμεύει δυναμικά μνήμη για την καταχώρηση του κειμένου και να διαβάζει τους αντίστοιχους χαρακτήρες.

Τι ακριβώς εννοεί με αυτό ??? Πώς το κάνουμε ??? Πάλι malloc???


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: Σαλτιμπάγκος on November 29, 2012, 00:31:19 am
μπορει καποιος να πει μεχρι ποιο σημειο της υλης πρεπει να ξερουμε για την ασκηση αυτη;;


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: Exomag on November 29, 2012, 00:35:51 am
Άσκηση C
Να γραφεί το λογισμικό στο οποίο ορίζεται η κλάση signal η οποία υλοποιεί ένα σήμα το κείμενου του οποίου πρόκειται να κρυπτογραφηθεί. Στην κλάση να ορίζονται δύο συναρτήσεις αρχικών συνθηκών από τις οποίες η πρώτη να δέχεται ως όρισμα έναν ακέραιο ο οποίος να δηλώνει τον αριθμό των bytes του κειμένου που πρόκειται να κρυπτογραφηθεί. Η συνάρτηση να δεσμεύει δυναμικά μνήμη για την καταχώρηση του κειμένου και να διαβάζει τους αντίστοιχους χαρακτήρες.

Τι ακριβώς εννοεί με αυτό ??? Πώς το κάνουμε ??? Πάλι malloc???

Εγώ καταλαβαίνω, να κάνεις malloc για να δεσμεύσεις δυναμικά χώρο για ένα string (πίνακα από char) και έπειτα να βάλεις σε αυτό το κείμενο που θα διαβαστεί απο το πληκρολόγιο.


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: heavy melon on November 29, 2012, 01:40:58 am
μπορει καποιος να πει μεχρι ποιο σημειο της υλης πρεπει να ξερουμε για την ασκηση αυτη;;

γενικά ναι, τι διαβάζουμε? Η εκφώνηση είναι λίγο τρομακτική  :D


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: Mr K on November 29, 2012, 11:49:54 am
μπορει καποιος να πει μεχρι ποιο σημειο της υλης πρεπει να ξερουμε για την ασκηση αυτη;;

γενικά ναι, τι διαβάζουμε?

Κληρονομικότητα. Πολλαπλή κληρονομικότητα.Δυναμικη παραχώρηση τιμών σε συναρτήσεις αρχικών συνθηκών, Pointer this


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: Mr K on November 29, 2012, 13:17:05 pm
Απο ότι κατάλαβα στις περιπτώσεις Β των skey και signal, το μηνύμα και το κλειδι θα δίνονται απο τον χρήστη στη main και μετα θα τα περνάμε στους constructors (για την ασκηση) με pointers και μήκος...ετσι;


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: thanospr on November 29, 2012, 13:48:23 pm
H decoding θα δεχεται ορισματα η οχι;


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: Exomag on November 29, 2012, 20:11:21 pm
Απο ότι κατάλαβα στις περιπτώσεις Β των skey και signal, το μηνύμα και το κλειδι θα δίνονται απο τον χρήστη στη main και μετα θα τα περνάμε στους constructors (για την ασκηση) με pointers και μήκος...ετσι;
Και εγώ αυτό κατάλαβα ;)

H decoding θα δεχεται ορισματα η οχι;
Όχι, θα λειτουργεί με τις μεταβλητές του αντικειμένου (τύπου broadcast) μέσω του οποίου θα την καλέσεις.


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: thanospr on November 30, 2012, 17:08:52 pm
Απ οτι καταλαβα θα εχουμε 4 τροπους με τους οποιους θα δινουμε το κειμενο και θα φτιαχνεται το κλειδι (δυο για το κειμενο και δυο για το κλειδι) και ανα δυο θα κανουν το ιδιο ακριβως πραγμα συμφωνα με την τελευταια παρατηρηση.Παρ ολα αυτα εμεις πρεπει να τις γραψουμε και τις 4 περιπτωσεις ;Διορθωστε με αν κανω λαθος

πχ. Στην μια περιπτωση να διαβαζουμε το κειμενο στην main (και να το στελνουμε στην signal με pointer) και να φτιαχνουμε ενα τυχαιο κλειδι (περιπτωση Β) και στην αλλη περιπτωση να διαβαζουμε το κειμενο στην signal και να φτιαχνουμε ενα τυχαιο κλειδι που συμφωνα με την εκφωνηση ειναι το ιδιο πραγμα


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: Σαλτιμπάγκος on November 30, 2012, 19:13:41 pm
Quote
Στη συνέχεια ένα νέο μενού να επιτρέπει να διαλέξουμε με ποιόν τρόπο θέλουμε να εισάγουμε το κείμενο και να δημιουργήσουμε το κλειδί με το οποίο θα το κρυπτογραφήσουμε.

Ποιοι ειναι πιθανοι τροποι εισαγωγης κειμενου;; :o


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: Alice_8 on December 01, 2012, 18:22:01 pm
Πως γίνεται το κλειδί στην Β περίπτωση??
Στην Α , καταλαβαίνω οτι δεχόμαστε εναν int ο οποίος ειναι το seed και με την rand() παίρνουμε τυχαίους αριθμους..
Στην Β πως παίρνουμε ετοιμο τ κλειδι?


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: Falergon on December 01, 2012, 18:39:03 pm
μήπως παίζει κανείς να με βοηθήσει να καταλάβω τι είναι αυτό το seed;


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: bakeneko on December 01, 2012, 18:45:42 pm
το γκουγκολ :P

http://www.cplusplus.com/forum/beginner/27851/
http://www.cplusplus.com/reference/cstdlib/srand/


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: Mr K on December 01, 2012, 20:59:42 pm
Το πρόβλημά μου: O πρωτος constructor της skey τρέχει κανονικά μόνος του. Όταν τον καλώ απο την broadcast κολλάει το πρόγραμμα. Ο constructor της broadcast τρέχει κανονικά μέχρι εκει:

Εντολή κλήσης της broadcast:
broadcast :: broadcast(int Length, int Seed): signal(Length), skey(Length, Seed)


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: heavy melon on December 01, 2012, 21:05:26 pm
this->
που λέει κι ο Κορτέσης


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: Mr K on December 01, 2012, 21:18:29 pm
Το πρόβλημά μου: O πρωτος constructor της skey τρέχει κανονικά μόνος του. Όταν τον καλώ απο την broadcast κολλάει το πρόγραμμα. Ο constructor της broadcast τρέχει κανονικά μέχρι εκει:

Εντολή κλήσης της broadcast:
broadcast :: broadcast(int Length, int Seed): signal(Length), skey(Length, Seed)

To λάθος είναι συνήθως αυτό που βγαίνει όταν ένας δείκτης ξεφεύγει απο τα όρια του πινακα και μου βγάζει οτι είναι μέσα σε αυτό το loop

//Creates pseydorandom-number key

     for (i=0; i<KeyLength; i++){
         Key [ i ] =rand();
     }


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: Exomag on December 01, 2012, 21:22:32 pm
Το πρόβλημά μου: O πρωτος constructor της skey τρέχει κανονικά μόνος του. Όταν τον καλώ απο την broadcast κολλάει το πρόγραμμα. Ο constructor της broadcast τρέχει κανονικά μέχρι εκει:

Εντολή κλήσης της broadcast:
broadcast :: broadcast(int Length, int Seed): signal(Length), skey(Length, Seed)

To λάθος είναι συνήθως αυτό που βγαίνει όταν ένας δείκτης ξεφεύγει απο τα όρια του πινακα και μου βγάζει οτι είναι μέσα σε αυτό το loop

//Creates pseydorandom-number key

     for (i=0; i<KeyLength; i++){
         Key [ i ] =rand();
     }

Δοκίμασε:
Code:
     for (i=0; i<KeyLength; i++){
         Key [i] =rand()%256;
     }


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: fasoul on December 01, 2012, 21:43:38 pm
Μπορεί κανείς να δείξει πώς χρησιμοποιούμε τις rand,srand
(δηλ τι ορίσματα δέχονται -αν δέχονται-, τι ακριβώς κάνουν,σε ποιο αρχείο είναι στον Dev κτλ);


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: bakeneko on December 01, 2012, 22:00:55 pm
το γκουγκολ :P

http://www.cplusplus.com/reference/cstdlib/rand/
http://www.cplusplus.com/reference/cstdlib/srand/


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: Infinite Loop on December 02, 2012, 14:18:26 pm
Quote from: Εκφωνηση
Οι συναρτήσεις αρχικών συνθηκών της κλάσης signal διακρίνουν δύο περιπτώσεις για την εισαγωγή του κειμένου που θα κρυπτογραφηθεί. Η πρώτη περίπτωση, όπου η συνάρτηση αρχικών συνθηκών δέχεται ένα όρισμα, αφορά την εισαγωγή ενός μικρού μηνύματος την ώρα της κρυπτογράφησης. Στη δεύτερη περίπτωση όπου, ως όρισμα η συνάρτηση αρχικών συνθηκών δέχεται έναν pointer, αφορά την εισαγωγή δεδομένων τα οποία μπορεί να αποτελούν το περιεχόμενο ενός αρχείου το οποίο θέλουμε να κρυπτογραφήσουμε. Για τη συγκεκριμένη άσκηση να εισάγεται αυτές τις τιμές από το πληκτρολόγιο.

Τι θελει να πει ο ποιητης; Ποιες οι ειναι οι τιμες που πρεπει να εισαγεται (sic); Δεν παιζει να θελει να δωσουμε pointer απο το πληκτρολογιο, string κατευθειαν δεν μπορεις να δωσεις γιατι σου ζηταει unsigned char *, αρα εμμεσως μας παραπεμπει στην πρωτη περιπτωση;


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: Exomag on December 02, 2012, 15:00:50 pm
Quote from: Εκφωνηση
Οι συναρτήσεις αρχικών συνθηκών της κλάσης signal διακρίνουν δύο περιπτώσεις για την εισαγωγή του κειμένου που θα κρυπτογραφηθεί. Η πρώτη περίπτωση, όπου η συνάρτηση αρχικών συνθηκών δέχεται ένα όρισμα, αφορά την εισαγωγή ενός μικρού μηνύματος την ώρα της κρυπτογράφησης. Στη δεύτερη περίπτωση όπου, ως όρισμα η συνάρτηση αρχικών συνθηκών δέχεται έναν pointer, αφορά την εισαγωγή δεδομένων τα οποία μπορεί να αποτελούν το περιεχόμενο ενός αρχείου το οποίο θέλουμε να κρυπτογραφήσουμε. Για τη συγκεκριμένη άσκηση να εισάγεται αυτές τις τιμές από το πληκτρολόγιο.

Τι θελει να πει ο ποιητης; Ποιες οι ειναι οι τιμες που πρεπει να εισαγεται (sic); Δεν παιζει να θελει να δωσουμε pointer απο το πληκτρολογιο, string κατευθειαν δεν μπορεις να δωσεις γιατι σου ζηταει unsigned char *, αρα εμμεσως μας παραπεμπει στην πρωτη περιπτωση;

Νομίζω πως ναι, εμμέσως σου λέει πως θα διαβάζεις πάλι το string από το πληκτρολόγιο όπως και στην πρώτη περίπτωση.


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: Mr K on December 02, 2012, 15:10:57 pm
Quote from: Εκφωνηση
Οι συναρτήσεις αρχικών συνθηκών της κλάσης signal διακρίνουν δύο περιπτώσεις για την εισαγωγή του κειμένου που θα κρυπτογραφηθεί. Η πρώτη περίπτωση, όπου η συνάρτηση αρχικών συνθηκών δέχεται ένα όρισμα, αφορά την εισαγωγή ενός μικρού μηνύματος την ώρα της κρυπτογράφησης. Στη δεύτερη περίπτωση όπου, ως όρισμα η συνάρτηση αρχικών συνθηκών δέχεται έναν pointer, αφορά την εισαγωγή δεδομένων τα οποία μπορεί να αποτελούν το περιεχόμενο ενός αρχείου το οποίο θέλουμε να κρυπτογραφήσουμε. Για τη συγκεκριμένη άσκηση να εισάγεται αυτές τις τιμές από το πληκτρολόγιο.

Τι θελει να πει ο ποιητης; Ποιες οι ειναι οι τιμες που πρεπει να εισαγεται (sic); Δεν παιζει να θελει να δωσουμε pointer απο το πληκτρολογιο, string κατευθειαν δεν μπορεις να δωσεις γιατι σου ζηταει unsigned char *, αρα εμμεσως μας παραπεμπει στην πρωτη περιπτωση;

Στην πρώτη διαβάζεται ενας ενας ο χαρακτηρας μεσα στην signal
Στην δευτερη ενας ενας ο χαρακτήρας μέσα στη main και το περνας σαν pointer και μήκος μεσα στην δευτερη περιπτωση της signal

Αυτό το ζητάει για να είναι εύκολα τροποποιήσιμο το πρόγραμμα σε περιπτωση που  κάποιος αγνωστος προγραμματιστης στο μέλλον (!!) θέλει να αλλάξει το προγραμμα μας (!!) ωστε να παίρνει κείμενα απο files(!!)

(Το μονο λογικο σε αυτό ειναι αν αυτη η εργασια είναι η βάση για κάποια μελλοντική εργασία)


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: Mr K on December 02, 2012, 15:20:42 pm
Ειναι κάτι που δεν καταλαβαινω. Λεει το προγραμμα στην main να επιτρέπει τον χρήστη να διαλέγει αν θέλει coding ή decoding.  Για να κάνει όμως decoding δεν πρέπει να κάνει πρώτα coding. Αρα το coding ειναι υποχρεωτικό. Η διαφορα θα είναι στο αν θα γινεται ή όχι decoding και στο τι θα εκτυπώνει στο τέλος το πρόγραμμα. Έτσι;



Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: sΚονταριτσα on December 02, 2012, 16:12:35 pm
αν μπορει καποιος ας μου πει αν το εχω καπως σωστο,γιατι σε ολο το τοπικ χαωνομαι.
δημιουργω εναν πινακα στους constructor της skey οπου καταχωρω το κλειδι το οποιο δημιουργειται απο τις συναρτησεις rand() και
srand().σωστο???
επισης παραθετω κομματι κωδικα μπας και μου πει κανεις αν βαδιζω σωστα.
Περιπτωση Α
skey (int mhkos_kleidiou,int sporos){
               bytes=mhkos_kleidiou;
               sporos=s;
               kleidi=(int *) malloc (mhkos_kleidiou*sizeof(int));
               srand(sporos);
               for (i=0;i<mhkos_kleidiou;i++){
                   kleidi(i)=rand()%255;
                   }

Περιπτωση Β
skey (int mhkos_kleidiou,unsigned char pointer_kleidiou){
                  mhkos_kleidiou=bytes;
                  kleidi=(int *) malloc (mhkos_kleidiou*sizeof(int));
                  pointer_kleidiou=*kleidi;
                  for (i=0;i<mhkos_kleidiou;i++){
                   kleidi(i)=rand()%255;
                   }
το πως θα χρησιμοποιησω τις rand και srand το βρηκα στο google.Το % 255 σημαινει οτι θελω να ειναι στο διαστημα [0,255]


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: c0ndemn3d on December 02, 2012, 16:51:53 pm
Ειναι κάτι που δεν καταλαβαινω. Λεει το προγραμμα στην main να επιτρέπει τον χρήστη να διαλέγει αν θέλει coding ή decoding.  Για να κάνει όμως decoding δεν πρέπει να κάνει πρώτα coding. Αρα το coding ειναι υποχρεωτικό. Η διαφορα θα είναι στο αν θα γινεται ή όχι decoding και στο τι θα εκτυπώνει στο τέλος το πρόγραμμα. Έτσι;



Δεν χρειάζεται coding για να μπορείς να διαλέξεις αποκρυπτογράφηση. Απλά από κάπου έχεις ένα κρυπτογραφημένο κείμενο και θέλεις να το αποκρυπτογραφήσεις. Ε ωραία, διαλέγεις αποκρυπτογράφηση, βάζεις κρυπτογραφημένο κείμενο και κλειδί και σου δίνει το αυθεντικό κείμενο.


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: thanospr on December 02, 2012, 18:01:34 pm
Ειναι κάτι που δεν καταλαβαινω. Λεει το προγραμμα στην main να επιτρέπει τον χρήστη να διαλέγει αν θέλει coding ή decoding.  Για να κάνει όμως decoding δεν πρέπει να κάνει πρώτα coding. Αρα το coding ειναι υποχρεωτικό. Η διαφορα θα είναι στο αν θα γινεται ή όχι decoding και στο τι θα εκτυπώνει στο τέλος το πρόγραμμα. Έτσι;



Δεν χρειάζεται coding για να μπορείς να διαλέξεις αποκρυπτογράφηση. Απλά από κάπου έχεις ένα κρυπτογραφημένο κείμενο και θέλεις να το αποκρυπτογραφήσεις. Ε ωραία, διαλέγεις αποκρυπτογράφηση, βάζεις κρυπτογραφημένο κείμενο και κλειδί και σου δίνει το αυθεντικό κείμενο.
Εγω αμα δεν εχω κανει προυγουμενως κωδικοποιηση ρωταω αν θελει να δωσει κλειδι και κρυπτογραφημα για να το αποκρυπτογραφησω αλλα αν εχω κρυπτογραφησει κατι αποκρυπτογραφω αυτο που εχει δωσει πορυγουμενως.Σωστο ειναι;


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: Exomag on December 02, 2012, 18:05:28 pm
Ειναι κάτι που δεν καταλαβαινω. Λεει το προγραμμα στην main να επιτρέπει τον χρήστη να διαλέγει αν θέλει coding ή decoding.  Για να κάνει όμως decoding δεν πρέπει να κάνει πρώτα coding. Αρα το coding ειναι υποχρεωτικό. Η διαφορα θα είναι στο αν θα γινεται ή όχι decoding και στο τι θα εκτυπώνει στο τέλος το πρόγραμμα. Έτσι;



Δεν χρειάζεται coding για να μπορείς να διαλέξεις αποκρυπτογράφηση. Απλά από κάπου έχεις ένα κρυπτογραφημένο κείμενο και θέλεις να το αποκρυπτογραφήσεις. Ε ωραία, διαλέγεις αποκρυπτογράφηση, βάζεις κρυπτογραφημένο κείμενο και κλειδί και σου δίνει το αυθεντικό κείμενο.
Εγω αμα δεν εχω κανει προυγουμενως κωδικοποιηση ρωταω αν θελει να δωσει κλειδι και κρυπτογραφημα για να το αποκρυπτογραφησω αλλα αν εχω κρυπτογραφησει κατι αποκρυπτογραφω αυτο που εχει δωσει πορυγουμενως.Σωστο ειναι;

Η εκφώνηση είναι τόσο vague που δεν έχει σωστό και λάθος. Υλοποίησε το όπως το καταλαβαίνεις εσύ, και σου φαίνεται εσένα σωστό ;)


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: varvoutis on December 02, 2012, 19:04:51 pm
Να ρωτήσω κάτι;

Για την κλάση signal που μας ζητάει η υλοποίηση (και κατ επέκταση για τους constructors της) δεν έχουμε θέμα μιας και υπάρχει ήδη μία έτοιμη συνάρτηση signal (http://www.cplusplus.com/reference/csignal/signal/) της c++;

Θα αναγνωρίσει τη διαφορά, ε;


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: anchelon on December 02, 2012, 19:28:10 pm
Στην κλάση signal η δεύτερη συνθήκη αρχικών συνθηκών τι ακριβώς κάνει?!λίγο αόριστη η ερώτηση αλλά στην αρχή νόμιζα ότι αυτός ο pointer που δέχεται θα ήταν κ ο πίνακας text μάλλον κανω λάθος όμως γιατί τν πίνακα text τον διαβάζουμε στην 1η ΣΑΣ!τι άσκηση κ αυτή :(


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: kofski17 on December 02, 2012, 20:59:04 pm
Επειδή κατά την κρυπτογράφηση μπορεί να προκύψουν χαρακτήρες που δεν εμφανίζονται στην οθόνη για την εκτύπωση ή την εισαγωγή του κρυπτογραφήματος να χρησιμοποιούνται οι αντίστοιχοι ASCII κωδικοί.

Πως ακριβώς το υλοποιούμε αυτό?


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: sΚονταριτσα on December 02, 2012, 21:11:11 pm
μια εργασια μπορουμε να μην την δωσουμε?ισχυει αυτο?


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: pentium4 on December 02, 2012, 21:14:45 pm
μια εργασια μπορουμε να μην την δωσουμε?ισχυει αυτο?

αν την εχεις κανει εστω και ως ενα σημειο ανεβασε την .(δε ξερω αν ισχυει)


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: 020400e on December 02, 2012, 21:21:01 pm
Στην κλάση να οριστεί ακόμη και η συνάρτηση decoding() η οποία να αποκρυπτογραφεί το κρυπτογράφημα που προέκυψε από τη συνάρτηση coding().

Μες στην decoding() πως καλούμε την coding() ?


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: Xleboniaris on December 02, 2012, 22:36:25 pm
Παιδιά μπορεί κάποιος να εξηγήσει, πως θα χειριστώ, την περίπτωση β με τον πόιντερ τύπου unsigned char(τι θα αλλάξω δηλαδή σε σχέση με την περίπτωση Α)?? Την περίπτωση  την έχω ολοκληρώσει...


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

Πως ακριβώς το υλοποιούμε αυτό?


Επίσης, η broadcast δεν έχει πρόσβαση στα private των βασικών κλάσεων, για να πάρω δηλαδή το κλειδί που δημιούργησα και το στρινγκ που έβαλα θα χρειαστώ συναρτήσεις get??
και τέλος επειδή δεν είμαι σίγουρος γι αυτό που έχω κάνει, πως κάνω ακριβώς την συνάρτηση coding να  επιστρέφει έναν pointer σε στοιχεία τύπου unsigned char ο οποίος να δείχνει στην περιοχή όπου έχει καταχωρηθεί το κρυπτογράφημα.


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: pentium4 on December 03, 2012, 18:02:15 pm
προλαβαινετε να ανεβασετε ακομα  :D


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: varvoutis on December 04, 2012, 04:56:11 am
προλαβαινετε να ανεβασετε ακομα  :D

στο τσακ πρόλαβα!  :D


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: pentium4 on December 04, 2012, 05:02:02 am
προλαβαινετε να ανεβασετε ακομα  :D

στο τσακ πρόλαβα!  :D

ας ελπισουμε να μη κοιταξει ημερομηνια και κοψει εργασιες !   >:(


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: varvoutis on December 04, 2012, 05:15:56 am
προλαβαινετε να ανεβασετε ακομα  :D

στο τσακ πρόλαβα!  :D

ας ελπισουμε να μη κοιταξει ημερομηνια και κοψει εργασιες !   >:(

ε δε νομίζω να το ξέχασε ανοιχτό...

αν δεν το κλείσει όμως και αύριο το πρωί θα ανησυχήσω  :(


Title: Re: [C++] Άσκηση C - 2012/2013 - Προθεσμία 02/12
Post by: Infinite Loop on December 04, 2012, 11:22:36 am
προλαβαινετε να ανεβασετε ακομα  :D

στο τσακ πρόλαβα!  :D

ας ελπισουμε να μη κοιταξει ημερομηνια και κοψει εργασιες !   >:(

ε δε νομίζω να το ξέχασε ανοιχτό...

αν δεν το κλείσει όμως και αύριο το πρωί θα ανησυχήσω  :(

Χωρις να θελω να παρω κανεναν στο λαιμο μου, ξερω οτι ο stk μαζευει τις εργασιες Δευτερα πρωι. Απο εκει και περα ειναι at your own risk.