Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 18182|Απάντηση: 0

[Πηγή] Η C# εφαρμόζει λεπτομερώς την κρυπτογράφηση και την αποκρυπτογράφηση RSA

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 4/11/2015 12:37:23 μ.μ. | | |
Οι απαιτήσεις του έργου, δημιουργία ιδιωτικού κλειδιού και δημόσιου κλειδιού, κρυπτογράφηση με δημόσιο κλειδί, αποκρυπτογράφηση με ιδιωτικό κλειδί, το υλοποίησα ως εξής,



Ελπίζω να βοηθήσω τους φίλους που έχουν αυτή την ανάγκη.







Ο πηγαίος κώδικας έχει ως εξής:



1. Δημιουργήστε ένα ζευγάρι κλειδιών:



          /// <summary>
        Δημιουργία ιδιωτικού κλειδιού και δημόσιου κλειδιού arr[0] για ιδιωτικό κλειδί arr[1] για δημόσιο κλειδί
        /// </summary>
        /// <returns></returns>
        δημόσια στατική συμβολοσειρά[] GenerateKeys()
        {
            string[] sKeys = νέα συμβολοσειρά[2];
            RSACryptoServiceProvider rsa = νέο RSACryptoServiceProvider();
            sKeys[0] = rsa. ToXmlString(αληθής);
            sKeys[1] = rsa. ToXmlString(false);
            επιστροφή κλειδιών?
        }



2. Κρυπτογράφηση:



      /// <summary>
        Κρυπτογράφηση RSA
        /// </summary>
       <όνομα παραμέτρου="sSource" >Συμβολοσειρά πηγής</param>
        <όνομα παραμέτρου ="sPublicKey" >δημόσιο κλειδί</param>
        /// <returns></returns>
        δημόσια στατική συμβολοσειρά EncryptString(συμβολοσειρά sSource,συμβολοσειρά sPublicKey)
        {
            RSACryptoServiceProvider rsa = νέο RSACryptoServiceProvider();
            συμβολοσειρά απλού κειμένου = sSource;
            RSA. FromXmlString(sPublicKey);
            byte[] κρυπτογραφημένα byte;
            byte[] byteEn = rsa. Κρυπτογράφηση(Encoding.UTF8.GetBytes("a"), false);
            cipherbytes = rsa. Κρυπτογράφηση(Encoding.UTF8.GetBytes(απλό κείμενο), false);



            StringBuilder sbString = νέο StringBuilder();
            για (int i = 0; < cipherbytes. Μήκος; i++)
            {
                sbString.Append(cipherbytes+ ",");
            }



3. Αποκρυπτογράφηση:



  /// <summary>
        Αποκρυπτογράφηση RSA
        /// </summary>
        <param name="sSource">Συμβολοσειρά πηγής</param>
        <όνομα παραμέτρου ="sPrivateKey">Ιδιωτικό κλειδί</param>
        /// <returns></returns>
        δημόσια στατική συμβολοσειρά DecryptString (String sSource, string sPrivateKey)
        {
            RSACryptoServiceProvider rsa = νέο RSACryptoServiceProvider();
            RSA. FromXmlString(sPrivateKey);
            byte[] byteEn = rsa. Κρυπτογράφηση(Encoding.UTF8.GetBytes("a"), false);
            string[] sBytes = sSource.Split(',');



            για (int j = 0; j < sBytes.Μήκος; j++)
            {
                αν (sBytes[j] != "")
                {
                    byteEn[j] = Byte.Parse(sBytes[j]);
                }
            }
            byte[] plaintbytes = rsa. Αποκρυπτογράφηση(byteEn, false);
            επιστροφή Encoding.UTF8.GetString(plaintbytes);
        }
            επιστροφή sbString.ToString();
        }





--------------------------------------------------------------------

Πηγαίος κώδικας κρυπτογράφησης και αποκρυπτογράφησης RSA:

χρησιμοποιώντας το Σύστημα.
χρησιμοποιώντας το System.Collections.Generic.
χρησιμοποιώντας το System.Linq.
χρησιμοποιώντας το System.Text.
χρησιμοποιώντας το System.Security.Cryptography.

χώρος ονομάτων MyRSA
χώρος ονομάτων MyRSA

{

MyRSA δημόσιας τάξης

{



privatestaticstring publicKey =

    "<RSAKeyValue><Modulus>6CdsXgYOyya/yQH"+

    "TO96dB3gEurM2UQDDVGrZoe6RcAVTxAqDDf5L"+

    "wPycZwtNOx3Cfy44/D5Mj86koPew5soFIz9sx"+

    "PAHRF5hcqJoG+q+UfUYTHYCsMH2cnqGVtnQiE"+

    "/PMRMmY0RwEfMIo+TDpq3QyO03MaEsDGf13sP"+

    "w9YRXiac=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";

privatestaticstring privateKey =

    "<RSAKeyValue><Modulus>6CdsXgYOyya/yQH"+

    "TO96dB3gEurM2UQDDVGrZoe6RcAVTxAqDDf5L"+

    "wPycZwtNOx3Cfy44/D5Mj86koPew5soFIz9sx"+

    "PAHRF5hcqJoG+q+UfUYTHYCsMH2cnqGVtnQiE"+

    "/PMRMmY0RwEfMIo+TDpq3QyO03MaEsDGf13sP"+

    "w9YRXiac=</Modulus><Exponent>AQAB</Exponent>"+

    "<P>/aoce2r6tonjzt1IQI6FM4ysR40j/gKvt4d"+

    "L411pUop1Zg61KvCm990M4uN6K8R/DUvAQdrRd"+

    "VgzvvAxXD7ESw==</P><Q>6kqclrEunX/fmOle"+

    "VTxG4oEpXY4IJumXkLpylNR3vhlXf6ZF9obEpG"+

    "lq0N7sX2HBxa7T2a0WznOAb0si8FuelQ==</Q>"+

    "<DP>3XEvxB40GD5v/Rr4BENmzQW1MBFqpki6FU"+

    "GrYiUd2My+iAW26nGDkUYMBdYHxUWYlIbYo6Te"+

    "zc3d/oW40YqJ2Q==</DP><DQ>LK0XmQCmY/ArY"+

    "gw2Kci5t51rluRrl4f5l+aFzO2K+9v3PGcndjA"+

    "StUtIzBWGO1X3zktdKGgCLlIGDrLkMbM21Q==</DQ><InverseQ>"+

    "GqC4Wwsk2fdvJ9dmgYlej8mTDBWg0Wm6aqb5kjn"+

    "cWK6WUa6CfD+XxfewIIq26+4Etm2A8IAtRdwPl4"+

    "aPjSfWdA==</InverseQ><D>a1qfsDMY8DSxB2D"+

    "Cr7LX5rZHaZaqDXdO3GC01z8dHjI4dDVwOS5ZFZ"+

    "s7MCN3yViPsoRLccnVWcLzOkSQF4lgKfTq3IH40"+

    "H5N4gg41as9GbD0g9FC3n5IT4VlVxn9ZdW+WQry"+

    "oHdbiIAiNpFKxL/DIEERur4sE1Jt9VdZsH24CJE=</D></RSAKeyValue>";



staticpublicstring Αποκρυπτογράφηση (συμβολοσειρά base64code)

{

    Δοκιμάστε

    {



        Δημιουργήστε έναν UnicodeEncoder για μετατροπή μεταξύ πίνακα byte και συμβολοσειράς.

        UnicodeEncoding ByteConverter = νέα UnicodeEncoding();



        Δημιουργήστε μια νέα παρουσία του RSACryptoServiceProvider για να δημιουργήσετε

        δεδομένων δημόσιου και ιδιωτικού κλειδιού.

        RSACryptoServiceProvider RSA = νέος RSACryptoServiceProvider();

        RSA. FromXmlString(privateKey);



        byte[] encryptedData;

        byte[] decryptedData;

        κρυπτογραφημέναδεδομένα = Μετατροπή.FromBase64String(κωδικός βάσης64);



        Περάστε τα δεδομένα στο DECRYPT, τις πληροφορίες ιδιωτικού κλειδιού

        (χρησιμοποιώντας RSACryptoServiceProvider.ExportParameters(true),

        και μια δυαδική σημαία που δεν προσδιορίζει καμία επένδυση OAEP.

        decryptedData = RSADecrypt(

            encryptedData, RSA. ExportParameters(true), false);



        Εμφανίστε το αποκρυπτογραφημένο απλό κείμενο στην κονσόλα.

        επιστροφή ByteConverter.GetString(decryptedData);

    }

    αλιεύματα (Εξαίρεση εξαιρουμένων)

    {

        Exceptions.LogException(exc);

        Console.WriteLine(εξαιρ. Μήνυμα);

        επιστροφή"";

    }

}



staticpublicstring Encrypt(string toEncryptString)

{

    Δοκιμάστε

    {

        Δημιουργήστε έναν UnicodeEncoder για μετατροπή μεταξύ πίνακα byte και συμβολοσειράς.

        UnicodeEncoding ByteConverter = νέα UnicodeEncoding();



        Δημιουργήστε συστοιχίες byte για να κρατάτε πρωτότυπα, κρυπτογραφημένα και αποκρυπτογραφημένα δεδομένα.

        byte[] dataToEncrypt =

            ByteConverter.GetBytes(toEncryptString);

        byte[] encryptedData;

        byte[] decryptedData;



        Δημιουργήστε μια νέα παρουσία του RSACryptoServiceProvider για να δημιουργήσετε

        δεδομένων δημόσιου και ιδιωτικού κλειδιού.

        RSACryptoServiceProvider RSA = νέος RSACryptoServiceProvider();



        RSA. FromXmlString(privateKey);



        Περάστε τα δεδομένα στο ENCRYPT, τις πληροφορίες δημόσιου κλειδιού

        (χρησιμοποιώντας RSACryptoServiceProvider.ExportParameters(false),

        και μια δυαδική σημαία που δεν προσδιορίζει καμία επένδυση OAEP.

        encryptedData = RSAEncrypt(

            dataToEncrypt, RSA. ExportParameters(false), false);



        συμβολοσειρά base64code = Convert.ToBase64String(encryptedData);

        επιστροφή base64κωδικός;

    }

    αλιεύματα (Εξαίρεση εξαιρουμένων)

    {

        Πιάστε αυτήν την εξαίρεση σε περίπτωση που η κρυπτογράφηση το έκανε

        δεν τα καταφέρνουν.

        Exceptions.LogException(exc);

        Console.WriteLine(εξαιρ. Μήνυμα);

        επιστροφή"";

    }







}



staticprivatebyte[] RSAEncrypt(

    byte[] DataToEncrypt,

    RSAParameters RSAKeyInfo,

    bool DoOAEPPadding)

{

    Δοκιμάστε

    {

        Δημιουργήστε μια νέα παρουσία του RSACryptoServiceProvider.

        RSACryptoServiceProvider RSA = νέος RSACryptoServiceProvider();



        Εισαγάγετε τις πληροφορίες κλειδιού RSA. Αυτό χρειάζεται μόνο

        πληροφορίες δημόσιου κλειδιού.

        RSA. ImportParameters(RSAKeyInfo);



        Κρυπτογραφήστε τον πίνακα byte που έχει περάσει και καθορίστε την αναπλήρωση OAEP.  

        Η αναπλήρωση OAEP είναι διαθέσιμη μόνο σε Microsoft Windows XP ή

        αργότερα.  

        επιστροφή RSA. Κρυπτογράφηση (DataToEncrypt, DoOAEPPadding);

    }

    Εντοπισμός και εμφάνιση μιας CryptographicException  

    στην κονσόλα.

    αλιεύματα (CryptographicException e)

    {

        Exceptions.LogException(e);

        Console.WriteLine(e.Message);



        επιστροφήnull;

    }



}



staticprivatebyte[] RSADecrypt(

    byte[] DataToDecrypt,

    RSAParameters RSAKeyInfo,

    bool DoOAEPPadding)

{

    Δοκιμάστε

    {

        Δημιουργήστε μια νέα παρουσία του RSACryptoServiceProvider.

        RSACryptoServiceProvider RSA = νέος RSACryptoServiceProvider();



        Εισαγάγετε τις πληροφορίες κλειδιού RSA. Αυτό χρειάζεται

        για να συμπεριλάβετε τις πληροφορίες ιδιωτικού κλειδιού.

        RSA. ImportParameters(RSAKeyInfo);



        Αποκρυπτογραφήστε τον πίνακα byte που έχει περάσει και καθορίστε την αναπλήρωση OAEP.  

        Η αναπλήρωση OAEP είναι διαθέσιμη μόνο σε Microsoft Windows XP ή

        αργότερα.  

        επιστροφή RSA. Αποκρυπτογράφηση (DataToDecrypt, DoOAEPPadding);

    }

    Εντοπισμός και εμφάνιση μιας CryptographicException  

    στην κονσόλα.

    αλιεύματα (CryptographicException e)

    {

        Exceptions.LogException(e);

        Console.WriteLine(e.Message);



        επιστροφήnull;

    }

}

}

}

  1. static void Main(string[] args)
  2.         {
  3.             string encodeString = MyRSA.Encrypt("1234567");
  4.             Console.WriteLine(encodeString);


  5.             string decode = MyRSA.Decrypt(encodeString);
  6.             Console.WriteLine(decode);

  7.             Console.ReadLine();
  8.         }
Αντιγραφή κώδικα






Προηγούμενος:Δημιουργήστε το δικό σας προσωπικό φόρουμ δωρεάν, μπορείτε να κερδίσετε χρήματα χτίζοντας για λογαριασμό σας και μπορείτε να το κάνετε σε τρία λεπτά
Επόμενος:Χρήση των onclick και href στην ετικέτα A στην HTML
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com