Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 18182|Răspunde: 0

[Sursă] C# implementează în detaliu criptarea și decriptarea RSA

[Copiază linkul]
Postat pe 04.11.2015 12:37:23 | | |
Cerințele proiectului sunt generarea unei chei private și a unei chei publice, criptarea cu cheia publică, decriptarea cu cheia privată, am implementat asta astfel,



Sper să pot fi de ajutor prietenilor care au această nevoie.







Codul sursă este următorul:



1. Generează o pereche de chei:



          /// <summary>
        generează cheia privată și cheia publică ARR[0] pentru cheia privată ARR[1] pentru cheia publică
        /// </summary>
        /// <returns></returns>
        șirul static public[] GenerateKeys()
        {
            string[] sKeys = String nou[2];
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            sKeys[0] = rsa. ToXmlString (adevărat);
            sKeys[1] = rsa. ToXmlString (fals);
            returnează sKeys;
        }



2. Criptare:



      /// <summary>
        /// RSA Encrypt
        /// </summary>
       <param name="sSource" >Șirul sursă</param>
        <param name="sPublicKey" >cheie publică</param>
        /// <returns></returns>
        șirul static public EncryptString(șir sSource, șir sPublicKey)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            șiru de text clar = sSource;
            RSA. FromXmlString(sPublicKey);
            octet[] cipherbyte;
            octet[] octet En = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false);
            cipherbytes = RSA. Encrypt(Encoding.UTF8.GetBytes(text clar), false);



            StringBuilder sbString = noul StringBuilder();
            pentru (int i = 0; Am < Cipherbytes. Lungime; i++)
            {
                sbString.Append(cipherbytes+ ",");
            }



3. Decriptare:



  /// <summary>
        Decriptare RSA
        /// </summary>
        <param name="sSource">Șirul sursă</param>
        <param name="sPrivateKey">Cheia privată</param>
        /// <returns></returns>
        șirul static public DecryptString(String sSource, șir sPrivateKey)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            RSA. FromXmlString(sPrivateKey);
            octet[] octet En = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false);
            string[] sBytes = sSource.Split(',');



            pentru (int j = 0; j < octeți. Lungime; j++)
            {
                dacă (sBytes[j] != "")
                {
                    byteEn[j] = Byte.Parse(sBytes[j]);
                }
            }
            octet[] plaintbytes = rsa. Decriptare (byteEn, false);
            return Encoding.UTF8.GetString(plaintbytes);
        }
            return sbString.ToString();
        }





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

Cod sursă pentru criptare și decriptare RSA:

folosind Sistem;
folosind System.Collections.Generic;
folosind System.Linq;
folosind System.Text;
folosind System.Security.Cryptography;

Spațiul de nume MyRSA
Spațiul de nume MyRSA

{

publicclass 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 Decriptare (string base64code)

{

    încearcă

    {



        Creează un UnicodeEncoder pentru a converti între tabloul de octeți și șirul de ochi.

        UnicodeEncoding ByteConverter = nou UnicodeEncoding();



        Creează o nouă instanță de RSACryptoServiceProvider pentru a genera

        Date cu cheie publică și privată.

        RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();

        RSA. FromXmlString (cheiePrivată);



        octet[] criptatData;

        octet[] decriptatData;

        encryptedData = Convert.FromBase64String(base64code);



        Transmite datele către DECRYPT, informațiile despre cheia privată

        (folosind RSACryptoServiceProvider.ExportParameters(true),

        și un steag boolean care nu specifică nicio umplutură OAEP.

        decryptedData = RSADecrypt(

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



        Afișează textul clar decriptat în consolă.

        return ByteConverter.GetString(decryptedData);

    }

    catch (excepție excepție)

    {

        Exceptions.LogException(exc);

        Console.WriteLine(exc. Mesaj);

        întoarce-te"";

    }

}



staticpublicstring Encrypt(string laEncryptString)

{

    încearcă

    {

        Creează un UnicodeEncoder pentru a converti între tabloul de octeți și șirul de ochi.

        UnicodeEncoding ByteConverter = nou UnicodeEncoding();



        Creează table de octeți pentru a stoca date originale, criptate și decriptate.

        octet[] dataToEncrypt =

            ByteConverter.GetBytes(toEncryptString);

        octet[] criptatData;

        octet[] decriptatData;



        Creează o nouă instanță de RSACryptoServiceProvider pentru a genera

        Date cu cheie publică și privată.

        RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();



        RSA. FromXmlString (cheiePrivată);



        Transmite datele către ENCRYPT, informațiile cu cheie publică

        (folosind RSACryptoServiceProvider.ExportParameters(false),

        și un steag boolean care nu specifică nicio umplutură OAEP.

        encryptedData = RSAEncrypt(

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



        string base64code = Convert.ToBase64String(encryptedData);

        returnează base64code;

    }

    catch (excepție excepție)

    {

        Prinde această excepție în cazul în care criptarea a făcut-o

        să nu reușească.

        Exceptions.LogException(exc);

        Console.WriteLine(exc. Mesaj);

        întoarce-te"";

    }







}



staticprivatebyte[] RSAEncrypt(

    octet[] DataToEncrypt,

    RSAParameters RSAKeyInfo,

    bool DoOAEPPadau)

{

    încearcă

    {

        Creează o nouă instanță de RSACryptoServiceProvider.

        RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();



        Importă informațiile cheie RSA. Este nevoie doar de asta

        pentru a include informațiile cu cheie publică.

        RSA. ImportParameters (RSAKeyInfo);



        Criptează array-ul de octeți pasați și specifică padding-ul OAEP.  

        Umplutura OAEP este disponibilă doar pe Microsoft Windows XP sau

        Mai târziu.  

        returnează RSA. Encrypt(DataToEncrypt, DoOAEPPadding);

    }

    Prinde și afișează o CryptographicException  

    către consolă.

    catch (CryptographicException e)

    {

        Excepții.LogException(e);

        Console.WriteLine(e.Message);



        returnnull;

    }



}



staticprivatebyte[] RSADecrypt(

    octet[] DataToDecrypt,

    RSAParameters RSAKeyInfo,

    bool DoOAEPPadau)

{

    încearcă

    {

        Creează o nouă instanță de RSACryptoServiceProvider.

        RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();



        Importă informațiile cheie RSA. Asta are nevoie

        pentru a include informațiile despre cheia privată.

        RSA. ImportParameters (RSAKeyInfo);



        Decriptează array-ul de octeți pasați și specifică umplerea OAEP.  

        Umplutura OAEP este disponibilă doar pe Microsoft Windows XP sau

        Mai târziu.  

        returnează RSA. Decriptare (DataToDecrypt, DoOAEPPadding);

    }

    Prinde și afișează o CryptographicException  

    către consolă.

    catch (CryptographicException e)

    {

        Excepții.LogException(e);

        Console.WriteLine(e.Message);



        returnnull;

    }

}

}

}

  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.         }
Cod de copiere






Precedent:Construiește-ți propriul forum personal gratuit, poți face bani construind în numele tău și poți face asta în trei minute
Următor:Utilizarea onclick și href în tag-ul A din HTML
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com