Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 18182|Svar: 0

[Källa] C# implementerar RSA-kryptering och dekryptering i detalj

[Kopiera länk]
Publicerad på 2015-11-04 12:37:23 | | |
Projektkraven: generera en privat och publik nyckel, kryptera med offentlig nyckel, dekryptera med privat nyckel, jag implementerade det så här,



Jag hoppas kunna hjälpa vänner som har detta behov.







Källkoden är följande:



1. Generera ett par nycklar:



          /// <summary>
        generera privat nyckel och publik nyckel arr[0] för privat nyckel arr[1] för publik nyckel
        /// </summary>
        /// <returns></returns>
        publik statisk sträng[] GenerateKeys()
        {
            string[] sKeys = ny sträng[2];
            RSACryptoServiceProvider rsa = ny RSACryptoServiceProvider();
            sKeys[0] = rsa. ToXmlString (true);
            sKeys[1] = rsa. ToXmlString (falsk);
            återvänder sKeys;
        }



2. Kryptering:



      /// <summary>
        RSA-kryptering
        /// </summary>
       <param name="sSource" >Source-strängen</param>
        <param name="sPublicKey" >offentlig nyckel</param>
        /// <returns></returns>
        publik statisk sträng EncryptString (sträng sSource,string sPublicKey)
        {
            RSACryptoServiceProvider rsa = ny RSACryptoServiceProvider();
            sträng klartext = sKälla;
            RSA. FromXmlString (sPublicKey);
            byte[] chifferbytes;
            byte[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false);
            Chifferbytar = RSA. Encrypt(Encoding.UTF8.GetBytes(klartext), falsk);



            StringBuilder sbString = ny StringBuilder();
            för (int i = 0; Jag < chifferbyten. Längd; i++)
            {
                sbString.Append(cipherbytes+ ",");
            }



3. Dekryptering:



  /// <summary>
        RSA-dekryptering
        /// </summary>
        <param name="sSource">Source-sträng</param>
        <param name="sPrivateKey">Private Key</param>
        /// <returns></returns>
        publik statisk sträng DecryptString (Sträng sSource, sträng sPrivateKey)
        {
            RSACryptoServiceProvider rsa = ny RSACryptoServiceProvider();
            RSA. FromXmlString(sPrivateKey);
            byte[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false);
            string[] sBytes = sSource.Split(',');



            för (int j = 0; j < sBytes. Längd; j++)
            {
                om (sBytes[j] != "")
                {
                    byteEn[j] = Byte.Parse(sBytes[j]);
                }
            }
            byte[] plaintbytes = rsa. Dekryptera(byteEn, false);
            return Encoding.UTF8.GetString(plaintbytes);
        }
            return sbString.ToString();
        }





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

RSA-kryptering och dekrypteringskällkod:

med System;
med System.Collections.Generic;
med System.Linq;
med System.Text;
använda System.Security.Cryptography;

namnrymden MyRSA
namnrymden 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 Dekryptering (strängbase64code)

{

    Försök

    {



        Skapa en UnicodeEncoder för att konvertera mellan bytearray och sträng.

        UnicodeEncoding ByteConverter =new UnicodeEncoding();



        Skapa en ny instans av RSACryptoServiceProvider för att generera

        offentliga och privata nyckeldata.

        RSACryptoServiceProvider RSA =ny RSACryptoServiceProvider();

        RSA. FromXmlString (privatnyckel);



        byte[] krypterade data;

        byte[] dekrypterade Data;

        encryptedData = Convert.FromBase64String (base64code);



        Skicka datan till DECRYPT, den privata nyckelinformationen

        (med RSACryptoServiceProvider.ExportParameters(true),

        och en boolesk flagga som anger att det inte finns OAEP-utfyllning.

        decryptedData = RSADecrypt(

            krypterade data, RSA. ExportParameters(true), false);



        Visa den dekrypterade klartexten på konsolen.

        returnera ByteConverter.GetString(decryptedData);

    }

    catch (undantag ex)

    {

        Undantag. LogException(exc);

        Console.WriteLine (etc. Meddelande);

        återvända"";

    }

}



staticpublicstring Encrypt(sträng toEncryptString)

{

    Försök

    {

        Skapa en UnicodeEncoder för att konvertera mellan bytearray och sträng.

        UnicodeEncoding ByteConverter =new UnicodeEncoding();



        Skapa bytearrayer för att hålla original, krypterad och dekrypterad data.

        byte[] dataToEncrypt =

            ByteConverter.GetBytes(toEncryptString);

        byte[] krypterade data;

        byte[] dekrypterade Data;



        Skapa en ny instans av RSACryptoServiceProvider för att generera

        offentliga och privata nyckeldata.

        RSACryptoServiceProvider RSA =ny RSACryptoServiceProvider();



        RSA. FromXmlString (privatnyckel);



        Skicka datan till ENCRYPT, den publika nyckelinformationen

        (med RSACryptoServiceProvider.ExportParameters(false),

        och en boolesk flagga som anger att det inte finns OAEP-utfyllning.

        encryptedData = RSAEncrypt(

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



        sträng base64code = Convert.ToBase64String(encryptedData);

        returnera base64code;

    }

    catch (undantag ex)

    {

        Fånga detta undantag om krypteringen gjorde det

        inte lyckas.

        Undantag. LogException(exc);

        Console.WriteLine (etc. Meddelande);

        återvända"";

    }







}



staticprivatebyte[] RSAEncrypt(

    byte[] DataToEncrypt,

    RSAParameters RSAKeyInfo,

    bool DoOAEPPadding)

{

    Försök

    {

        Skapa en ny instans av RSACryptoServiceProvider.

        RSACryptoServiceProvider RSA =ny RSACryptoServiceProvider();



        Importera RSA-nyckelinformationen. Det här behöver bara

        för att inkludera informationen om den offentliga nyckeln.

        RSA. ImportParameters(RSAKeyInfo);



        Kryptera den passerade bytearrayen och specificera OAEP-utfyllnad.  

        OAEP-utfyllnad finns endast på Microsoft Windows XP eller

        senare.  

        återvänd RSA. Encrypt(DataToEncrypt, DoOAEPPadding);

    }

    Fånga och visa ett kryptografiskt undantag  

    till konsolen.

    catch (CryptographicException e)

    {

        Undantag.LogException(e);

        Console.WriteLine(e.Message);



        returnnull;

    }



}



staticprivatebyte[] RSADecrypt(

    byte[] DataToDekryptering,

    RSAParameters RSAKeyInfo,

    bool DoOAEPPadding)

{

    Försök

    {

        Skapa en ny instans av RSACryptoServiceProvider.

        RSACryptoServiceProvider RSA =ny RSACryptoServiceProvider();



        Importera RSA-nyckelinformationen. Det här behöver

        att inkludera privat nyckelinformation.

        RSA. ImportParameters(RSAKeyInfo);



        Dekryptera den passerade bytearrayen och specificera OAEP-utfyllning.  

        OAEP-utfyllnad finns endast på Microsoft Windows XP eller

        senare.  

        återvänd RSA. Dekryptera (DataToDecrypt, DoOAEPPadding);

    }

    Fånga och visa ett kryptografiskt undantag  

    till konsolen.

    catch (CryptographicException e)

    {

        Undantag.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.         }
Kopiera koden






Föregående:Bygg ditt eget personliga forum gratis, du kan tjäna pengar genom att bygga åt dig, och du kan göra det på tre minuter
Nästa:Användning av onclick och href i A-taggen i HTML
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com