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

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


tsakitsan95

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

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

Ας ξενικησουμε απο την αρχη πριν φτάσουμε σε 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 αλλα δεν ειμαι σιγουρος στο τελος πως προκυπτει ο αριθμος.
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

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

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

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

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

Σύνδεση

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

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