Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 18182|Svar: 0

[Kilde] C# implementerer RSA-kryptering og dekryptering i detaljer

[Kopier link]
Opslået på 04/11/2015 12.37.23 | | |
Projektets krav: generer en privat nøgle og en offentlig nøgle, krypterer med offentlig nøgle, dekrypterer med privat nøgle, jeg har implementeret det sådan her,



Jeg håber at kunne hjælpe venner, der har dette behov.







Kildekoden er som følger:



1. Generer et par nøgler:



          /// <summary>
        generer privat nøgle og offentlig nøgle arr[0] for privat nøgle arr[1] for offentlig nøgle
        /// </summary>
        /// <returns></returns>
        offentlig statisk streng[] GenerateKeys()
        {
            string[] sKeys = ny Streng[2];
            RSACryptoServiceProvider rsa = ny RSACryptoServiceProvider();
            sKeys[0] = rsa. ToXmlString (true);
            sKeys[1] = rsa. ToXmlString (falsk);
            returner sKeys;
        }



2. Kryptering:



      /// <summary>
        RSA-kryptering
        /// </summary>
       <param name="sSource" >Source-streng</param>
        <param name="sPublicKey" >offentlig nøgle</param>
        /// <returns></returns>
        offentlig statisk streng EncryptString(streng sSource,streng sPublicKey)
        {
            RSACryptoServiceProvider rsa = ny RSACryptoServiceProvider();
            streng klartekst = sKilde;
            RSA. FromXmlString(sPublicKey);
            byte[] chifferbytes;
            byte[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), falsk);
            Cipherbytes = RSA. Encrypt(Encoding.UTF8.GetBytes(klartekst), falsk);



            StringBuilder sbString = ny StringBuilder();
            for (int i = 0; Jeg < cipherbytes. Længde; i++)
            {
                sbString.Append(cipherbytes)+ ",");
            }



3. Dekryptering:



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



            for (int j = 0; j < sBytes.Length; j++)
            {
                hvis (sBytes[j] != "")
                {
                    byteEn[j] = Byte.Parse(sBytes[j]);
                }
            }
            byte[] plaintbytes = rsa. Dekryptering(byteEn, falsk);
            return Encoding.UTF8.GetString(plaintbytes);
        }
            return sbString.ToString();
        }





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

RSA-krypterings- og dekrypteringskildekode:

ved brug af System;
ved brug af System.Collections.Generic;
ved brug af System.Linq;
ved brug af System.Text;
brug af System.Security.Cryptography;

navnerum MyRSA
navnerum 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 Decrypt (streng base64code)

{

    Prøv

    {



        Opret en UnicodeEncoder til at konvertere mellem byte-array og streng.

        UnicodeEncoding ByteConverter =new UnicodeEncoding();



        Opret en ny instans af RSACryptoServiceProvider til at generere

        offentlige og private nøgledata.

        RSACryptoServiceProvider RSA =ny RSACryptoServiceProvider();

        RSA. FromXmlString (privatnøgle);



        byte[] krypteretData;

        byte[] dekrypteretData;

        encryptedData = Convert.FromBase64String(base64code);



        Send dataene til DECRYPT, de private nøgleoplysninger

        (ved brug af RSACryptoServiceProvider.ExportParameters(true),

        og et boolsk flag, der angiver, at der ikke er OAEP-polstring.

        dekrypteretData = RSADecrypt(

            krypterede data, RSA. ExportParameters(true), falsk);



        Vis den dekrypterede klartekst til konsollen.

        return ByteConverter.GetString(decryptedData);

    }

    catch (undtagelse osv.)

    {

        Undtagelser. LogUndtagelse (undtaget);

        Console.WriteLine (f.eks. Besked);

        "vend tilbage";

    }

}



staticpublicstring Encrypt(string toEncryptString)

{

    Prøv

    {

        Opret en UnicodeEncoder til at konvertere mellem byte-array og streng.

        UnicodeEncoding ByteConverter =new UnicodeEncoding();



        Opret byte-arrays til at indeholde originale, krypterede og dekrypterede data.

        byte[] dataToEncrypt =

            ByteConverter.GetBytes(toEncryptString);

        byte[] krypteretData;

        byte[] dekrypteretData;



        Opret en ny instans af RSACryptoServiceProvider til at generere

        offentlige og private nøgledata.

        RSACryptoServiceProvider RSA =ny RSACryptoServiceProvider();



        RSA. FromXmlString (privatnøgle);



        Send dataene videre til ENCRYPT, den offentlige nøgleinformation

        (ved brug af RSACryptoServiceProvider.ExportParameters(false),

        og et boolsk flag, der angiver, at der ikke er OAEP-polstring.

        encryptedData = RSAEncrypt(

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



        string base64code = Convert.ToBase64String(encryptedData);

        returner base64code;

    }

    catch (undtagelse osv.)

    {

        Fang denne undtagelse, hvis krypteringen gjorde det

        ikke lykkes.

        Undtagelser. LogUndtagelse (undtaget);

        Console.WriteLine (f.eks. Besked);

        "vend tilbage";

    }







}



staticprivatebyte[] RSAEncrypt(

    byte[] DataToEncrypt,

    RSAParameters RSAKeyInfo,

    bool DoOAEPPadder)

{

    Prøv

    {

        Opret en ny instans af RSACryptoServiceProvider.

        RSACryptoServiceProvider RSA =ny RSACryptoServiceProvider();



        Importer RSA-nøgleinformationen. Det kræver kun

        at inkludere den offentlige nøgleinformation.

        RSA. ImportParameters(RSAKeyInfo);



        Krypter det overleverede bytearray og specificér OAEP-udfyldning.  

        OAEP-udfyldning er kun tilgængelig på Microsoft Windows XP eller

        Senere.  

        returner RSA. Kryptering(DataToEncrypt, DoOAEPPadding);

    }

    Fang og vis en CryptographicException  

    til konsollen.

    catch (CryptographicException e)

    {

        Undtagelser.LogUndtagelse(e);

        Console.WriteLine(e.Message);



        returnnull;

    }



}



staticprivatebyte[] RSADecrypt(

    byte[] DataToDekryptering,

    RSAParameters RSAKeyInfo,

    bool DoOAEPPadder)

{

    Prøv

    {

        Opret en ny instans af RSACryptoServiceProvider.

        RSACryptoServiceProvider RSA =ny RSACryptoServiceProvider();



        Importer RSA-nøgleinformationen. Det her skal

        at inkludere oplysningerne om private nøgler.

        RSA. ImportParameters(RSAKeyInfo);



        Dekrypter det passerede byte-array og specificér OAEP-padding.  

        OAEP-udfyldning er kun tilgængelig på Microsoft Windows XP eller

        Senere.  

        returner RSA. Dekryptering(DataToDekryptering, DoOAEPPadding);

    }

    Fang og vis en CryptographicException  

    til konsollen.

    catch (CryptographicException e)

    {

        Undtagelser.LogUndtagelse(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.         }
Kopier kode






Tidligere:Byg dit eget personlige forum gratis, du kan tjene penge ved at bygge på dine vegne, og du kan gøre det på tre minutter
Næste:Brug af onclick og href i A-tagget i HTML
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com