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

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

Δημοσ.

Καλησπερα , εδω και κατι μερες φτιαχνω μια υλοποιηση του 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();
        }
  • Απαντ. 39
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Δημοσ.

Ας ξενικησουμε απο την αρχη πριν φτάσουμε σε byte array to int conversion. Για ποιο λόγο το message που έχεις το διαχειρίζεσαι ως αριθμητικό ?

  • Like 1
Δημοσ.

Ας ξενικησουμε απο την αρχη πριν φτάσουμε σε 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;
        }
Φαινεται να μου δουλευει. Ποιο γρηγορος τροπος δεν υπαρχει?
Δημοσ.

Αν ο χρήστης δώσει 0001293847. Τι θα του γυρισεις μετα ?

Αυτο θα του επιστρεψει. Δεν εχω θεματα με υπερχειλισεις. Το θεμα μου ειναι οτι θελω να υπολογισω μια ποσοτητα την οποια ομως για να το κανω , θα πρεπει να κανω μετατροπες απο byte σε integer και το αντιστροφο.

post-274833-0-91928900-1483481388_thumb.jpg

Δημοσ.

Αυτο θα του επιστρεψει. Δεν εχω θεματα με υπερχειλισεις. Το θεμα μου ειναι οτι θελω να υπολογισω μια ποσοτητα την οποια ομως για να το κανω , θα πρεπει να κανω μετατροπες απο byte σε integer και το αντιστροφο.

 

Και μόνος σου το βρίσκεις το λάθος στο screenshot. Τα μηδενικά στην αρχή που πήγαν; Μάλλον αντί για rsa πρέπει να ασχοληθείς με βασικότερες έννοιες...

Δημοσ.

Και μόνος σου το βρίσκεις το λάθος στο screenshot. Τα μηδενικά στην αρχή που πήγαν; Μάλλον αντί για rsa πρέπει να ασχοληθείς με βασικότερες έννοιες...

Καθε βοηθεια ευπροσδεκτη ειναι.Σαν ποιες βασικοτερες εννοιες εννοεις; Σαυτο που φτιαχνω στοχος μου ειναι να καταφερω να υλοποιησω ομομορφικη κρυπτογραφιση. Τα μηδενικα προφανως δεν με ενδιαφερουν εφοσον βρισκονται στα αριστερα. 

  • Moderators
Δημοσ.

Αν θες να κρυπτογραφήσεις κάτι, γιατί δεν το κρυπτογραφείς ως string; Γιατί να το κρυπτογραφήσεις ως οτιδήποτε άλλο;

  • Like 1
Δημοσ.

Διοτι στον rsa ισχυει οτι το μηνυμα χ κρυπτογραφειται ως e(x)=x^emodm οπου e,m ποσοτητες του δημοσιου κλειδιου.Συνεπως ισχυει

E(x1)*E(x2)=(x1^e)*(x2^e)modm=(x1*x2)^emodm=E(x1*x2) και στοχος μου ειναι να χρησιμοποιησω αυτο.

  • Moderators
Δημοσ.

Ναι το ξέρω, εννοώ γιατί κάνεις διαχωρισμό μεταξύ νούμερου και string. Γιατί δεν κρυπτογραφείς το νούμερο ως string;

  • Like 1
  • Moderators
Δημοσ.

Εξακολουθώ να μην καταλαβαίνω γιατί κάνεις το διαχωρισμό. Αυτό που διαβάζεις ως string δεν το διαβάζεις; Γιατί να μπεις στη διαδικασία να δεις αν είναι αριθμός, να το μετατρέψεις, να το κρυπτογραφήσεις και μετά να το ξαναμετατρέψεις; Εκτός του ότι αυτό είναι λάθος (όπως βλέπεις και από το screenshot - ο χρήστης σου έδωσε ένα string κι εσύ τελείως αυθαίρετα το μετέτρεψες σε αριθμό επειδή έτυχε να μοιάζει με αριθμό), γιατί να κάνεις όλη αυτή τη διαδικασία;

Δημοσ. (επεξεργασμένο)

Ανάλογα με τα συμφραζομενα το

 

Αυτο θα του επιστρεψει. Δεν εχω θεματα με υπερχειλισεις. Το θεμα μου ειναι οτι θελω να υπολογισω μια ποσοτητα την οποια ομως για να το κανω , θα πρεπει να κανω μετατροπες απο 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 διορθωσε με αν λεω κατι λάθος)

Επεξ/σία από Aztec
  • Like 1
Δημοσ.

Αυτο

Ανάλογα με τα συμφραζομενα το

 

 

 

Ανάλογα με τα συμφραζόμενα το 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 αλλα δεν ειμαι σιγουρος στο τελος πως προκυπτει ο αριθμος.
Δημοσ.

Όπως το σκεφτομαι πρέπει να χρησιμοποιήσεις απλό RSA χωρίς padding . Είσαι σίγουρος ότι η κλάση που χρησιμοποιείς δεν κάνει padding ?

  • Like 1

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

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