Προς το περιεχόμενο
  • 0
Συνδεθείτε  
tsakitsan95

Μετατροπη απο bytes σε int32 (c#)

Ερώτηση

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

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

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

  • 0

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

  • Like 1

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

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

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

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

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

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

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

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

 

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

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

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

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

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

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

  • Like 1

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

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

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

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

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

  • Like 1

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

θα μπορουσα αλλα θα εχω μια επιπλεον μετατροπη μετα. θα με βοηθουσε σε κατι πιστευεις;

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

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

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0
Δημοσ. (επεξεργασμένο)

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

 

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

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Αυτο

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

 

 

 

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

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

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

  • Like 1

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

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

Και γω αυτο πιστευω οτι ειναι το προβλημα. Προσπαθω στο κωδικα να βγαλω το padding , αλλα δεν ειμαι 100% σιγουρος αν το κανω σωστα.

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

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

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

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

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

Εγγραφείτε για έναν νέο λογαριασμό

Σύνδεση

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

Συνδεθείτε τώρα
Συνδεθείτε  
×
×
  • Δημιουργία νέου...

Χρήσιμες πληροφορίες

Με την περιήγησή σας στο insomnia.gr, αποδέχεστε τη χρήση cookies που ενισχύουν σημαντικά την εμπειρία χρήσης.