tsakitsan95 Δημοσ. 3 Ιανουαρίου 2017 Δημοσ. 3 Ιανουαρίου 2017 Καλησπερα , εδω και κατι μερες φτιαχνω μια υλοποιηση του rsa. Εχω κολλησει στο εξης σημειο: διαβαζω τον int , στη συνεχεια τον μετατρεπω σε ακολουθια απο bytes την οποια κρυπτογραφω.Το προβλημα μου ειναι οτι δεν μπορω την αποκρυπτογραφημενη ακολουθια απο bytes να την ξαναμετατρεψω σε integer. Το προγραμμα δουλευει σωστα αφου κρυπτογραφει και αποκρυπτογραφει string μια χαρα. static void Main(string[] args) { int message; Console.WriteLine("Enter the text you want to encrypt"); message = int.Parse(Console.ReadLine()); string publicKeyFile = "C:/Users/teo/Desktop/XML/publicKey.xml"; string PrivateKeyFile = "C:/Users/teo/Desktop/XML/private.xml"; generateKeys(publicKeyFile, PrivateKeyFile); byte[] encrypted = Encrypt(publicKeyFile, BitConverter.GetBytes(message)); byte[] decrypted = Decrypt(PrivateKeyFile, encrypted); Console.WriteLine("Original\n\t" + message + "\n"); Console.WriteLine("Encrypted\n\t" + BitConverter.ToString(encrypted).Replace("-", "") + "\n"); message = Convert.ToInt32(decrypted); Console.WriteLine("Decrypted\n\t" +message + "\n"); Console.ReadLine(); }
Aztec Δημοσ. 3 Ιανουαρίου 2017 Δημοσ. 3 Ιανουαρίου 2017 Ας ξενικησουμε απο την αρχη πριν φτάσουμε σε byte array to int conversion. Για ποιο λόγο το message που έχεις το διαχειρίζεσαι ως αριθμητικό ? 1
tsakitsan95 Δημοσ. 4 Ιανουαρίου 2017 Μέλος Δημοσ. 4 Ιανουαρίου 2017 Ας ξενικησουμε απο την αρχη πριν φτάσουμε σε byte array to int conversion. Για ποιο λόγο το message που έχεις το διαχειρίζεσαι ως αριθμητικό ? Καλησπερα. Δεν ειναι text , ξεχασα να αλλαξω το μηνυμα. Integer διαβαζει απο το χρηστη. Μια λυση που βρηκα ειναι αυτη: public static int decryptedintegerNbit(byte[] byteArray) { int sum = 0; int[] intArray = new int[byteArray.Length / N/8]; for (int i = 0; i < byteArray.Length; i += N/8) { intArray[i / N/8] = BitConverter.ToInt32(byteArray, i); sum += intArray[i / (N/8)]; } return sum; } Φαινεται να μου δουλευει. Ποιο γρηγορος τροπος δεν υπαρχει?
Aztec Δημοσ. 4 Ιανουαρίου 2017 Δημοσ. 4 Ιανουαρίου 2017 Αν ο χρήστης δώσει 0001293847. Τι θα του γυρισεις μετα ? 1
tsakitsan95 Δημοσ. 4 Ιανουαρίου 2017 Μέλος Δημοσ. 4 Ιανουαρίου 2017 Αν ο χρήστης δώσει 0001293847. Τι θα του γυρισεις μετα ? Αυτο θα του επιστρεψει. Δεν εχω θεματα με υπερχειλισεις. Το θεμα μου ειναι οτι θελω να υπολογισω μια ποσοτητα την οποια ομως για να το κανω , θα πρεπει να κανω μετατροπες απο byte σε integer και το αντιστροφο.
jimex Δημοσ. 4 Ιανουαρίου 2017 Δημοσ. 4 Ιανουαρίου 2017 Αυτο θα του επιστρεψει. Δεν εχω θεματα με υπερχειλισεις. Το θεμα μου ειναι οτι θελω να υπολογισω μια ποσοτητα την οποια ομως για να το κανω , θα πρεπει να κανω μετατροπες απο byte σε integer και το αντιστροφο. Και μόνος σου το βρίσκεις το λάθος στο screenshot. Τα μηδενικά στην αρχή που πήγαν; Μάλλον αντί για rsa πρέπει να ασχοληθείς με βασικότερες έννοιες...
tsakitsan95 Δημοσ. 4 Ιανουαρίου 2017 Μέλος Δημοσ. 4 Ιανουαρίου 2017 Και μόνος σου το βρίσκεις το λάθος στο screenshot. Τα μηδενικά στην αρχή που πήγαν; Μάλλον αντί για rsa πρέπει να ασχοληθείς με βασικότερες έννοιες... Καθε βοηθεια ευπροσδεκτη ειναι.Σαν ποιες βασικοτερες εννοιες εννοεις; Σαυτο που φτιαχνω στοχος μου ειναι να καταφερω να υλοποιησω ομομορφικη κρυπτογραφιση. Τα μηδενικα προφανως δεν με ενδιαφερουν εφοσον βρισκονται στα αριστερα.
Moderators Kercyn Δημοσ. 4 Ιανουαρίου 2017 Moderators Δημοσ. 4 Ιανουαρίου 2017 Αν θες να κρυπτογραφήσεις κάτι, γιατί δεν το κρυπτογραφείς ως string; Γιατί να το κρυπτογραφήσεις ως οτιδήποτε άλλο; 1
tsakitsan95 Δημοσ. 4 Ιανουαρίου 2017 Μέλος Δημοσ. 4 Ιανουαρίου 2017 Διοτι στον rsa ισχυει οτι το μηνυμα χ κρυπτογραφειται ως e(x)=x^emodm οπου e,m ποσοτητες του δημοσιου κλειδιου.Συνεπως ισχυει E(x1)*E(x2)=(x1^e)*(x2^e)modm=(x1*x2)^emodm=E(x1*x2) και στοχος μου ειναι να χρησιμοποιησω αυτο.
Moderators Kercyn Δημοσ. 4 Ιανουαρίου 2017 Moderators Δημοσ. 4 Ιανουαρίου 2017 Ναι το ξέρω, εννοώ γιατί κάνεις διαχωρισμό μεταξύ νούμερου και string. Γιατί δεν κρυπτογραφείς το νούμερο ως string; 1
tsakitsan95 Δημοσ. 4 Ιανουαρίου 2017 Μέλος Δημοσ. 4 Ιανουαρίου 2017 θα μπορουσα αλλα θα εχω μια επιπλεον μετατροπη μετα. θα με βοηθουσε σε κατι πιστευεις;
Moderators Kercyn Δημοσ. 4 Ιανουαρίου 2017 Moderators Δημοσ. 4 Ιανουαρίου 2017 Εξακολουθώ να μην καταλαβαίνω γιατί κάνεις το διαχωρισμό. Αυτό που διαβάζεις ως string δεν το διαβάζεις; Γιατί να μπεις στη διαδικασία να δεις αν είναι αριθμός, να το μετατρέψεις, να το κρυπτογραφήσεις και μετά να το ξαναμετατρέψεις; Εκτός του ότι αυτό είναι λάθος (όπως βλέπεις και από το screenshot - ο χρήστης σου έδωσε ένα string κι εσύ τελείως αυθαίρετα το μετέτρεψες σε αριθμό επειδή έτυχε να μοιάζει με αριθμό), γιατί να κάνεις όλη αυτή τη διαδικασία;
Aztec Δημοσ. 4 Ιανουαρίου 2017 Δημοσ. 4 Ιανουαρίου 2017 (επεξεργασμένο) Ανάλογα με τα συμφραζομενα το Αυτο θα του επιστρεψει. Δεν εχω θεματα με υπερχειλισεις. Το θεμα μου ειναι οτι θελω να υπολογισω μια ποσοτητα την οποια ομως για να το κανω , θα πρεπει να κανω μετατροπες απο byte σε integer και το αντιστροφο. Ανάλογα με τα συμφραζόμενα το 00000123434 και το 123434 μπορεί να μην ειναι ισοδύναμα. Εφόσον όμως εξήγησες τι θέλεις να κάνεις και παίζεις πάνω σε αριθμούς (BigInteger μήπως ?) το ιδανικό είναι να κάνεις implement συγκεκριμένα τον RSA για αυτό που θέλεις. Διαφορετικά conversion απο String σε Number ή μετατροπή bytes σε Int με χρήση της BitConverter Ουσιαστικά ο φίλος αυτό που θέλει να κάνει ειναι : 1)Encrypt εναν αριθμο Α 2)Encrypt έναν αριθμό Β 3)C=A*B (δηλαδή πολλαπλασιάζει τους δύο αριθμούς στην encrypted μορφή) 4)Decrypt C και ουσιαστικά πρέπει να δώσει το γινόμενο χωρίς να χρειαστεί να κάνει decrypt τους δύο αριθμούς (TS διορθωσε με αν λεω κατι λάθος) Επεξ/σία 4 Ιανουαρίου 2017 από Aztec 1
tsakitsan95 Δημοσ. 4 Ιανουαρίου 2017 Μέλος Δημοσ. 4 Ιανουαρίου 2017 Αυτο Ανάλογα με τα συμφραζομενα το Ανάλογα με τα συμφραζόμενα το 00000123434 και το 123434 μπορεί να μην ειναι ισοδύναμα. Εφόσον όμως εξήγησες τι θέλεις να κάνεις και παίζεις πάνω σε αριθμούς (BigInteger μήπως ?) το ιδανικό είναι να κάνεις implement συγκεκριμένα τον RSA για αυτό που θέλεις. Διαφορετικά conversion απο String σε Number ή μετατροπή bytes σε Int με χρήση της BitConverter Ουσιαστικά ο φίλος αυτό που θέλει να κάνει ειναι : 1)Encrypt εναν αριθμο Α 2)Encrypt έναν αριθμό Β 3)C=A*B (δηλαδή πολλαπλασιάζει τους δύο αριθμούς στην encrypted μορφή) 4)Decrypt C και ουσιαστικά πρέπει να δώσει το γινόμενο χωρίς να χρειαστεί να κάνει decrypt τους δύο αριθμούς (TS διορθωσε με αν λεω κατι λάθος) Αυτο ακριβως και ευχαριστω για τη διευκρινηση , αν δεν κατεφερα να γινω κατανοητος. Btw αν γνωριζει και μπορει να με βοηθησει καποιος, δεν ειμαι σιγουρος πως ακριβως πρεπει να γινει ο πολ/σμος ,μιας και δε βρηκα αρκετα στο google. Κατι διαβασα για byte by byte αλλα δεν ειμαι σιγουρος στο τελος πως προκυπτει ο αριθμος.
Aztec Δημοσ. 4 Ιανουαρίου 2017 Δημοσ. 4 Ιανουαρίου 2017 Όπως το σκεφτομαι πρέπει να χρησιμοποιήσεις απλό RSA χωρίς padding . Είσαι σίγουρος ότι η κλάση που χρησιμοποιείς δεν κάνει padding ? 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα