Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 18182|Antwoord: 0

[Bron] C# implementeert RSA-encryptie en -decryptie in detail

[Link kopiëren]
Geplaatst op 04-11-2015 12:37:23 | | |
De projectvereisten: een privésleutel en publieke sleutel genereren, versleutelen met publieke sleutel, ontsleutelen met privésleutel, ik heb het zo geïmplementeerd,



Ik hoop vrienden te kunnen helpen die deze behoefte hebben.







De broncode is als volgt:



1. Genereer een paar sleutels:



          /// <summary>
        Genereer privésleutel en publieke sleutel arr[0] voor privésleutel arr[1] voor publieke sleutel
        /// </summary>
        /// <returns></returns>
        publieke statische string[] GenerateKeys()
        {
            string[] sKeys = nieuwe String[2];
            RSACryptoServiceProvider rsa = nieuwe RSACryptoServiceProvider();
            sKeys[0] = rsa. ToXmlString (waar);
            sKeys[1] = rsa. ToXmlString (onwaar);
            Returneer sKeys;
        }



2. Encryptie:



      /// <summary>
        RSA Versleutel
        /// </summary>
       <param name="sSource" >Source-string</param>
        <param name="sPublicKey" >publieke sleutel</param>
        /// <returns></returns>
        publieke statische string EncryptString (string sSource,string sPublicKey)
        {
            RSACryptoServiceProvider rsa = nieuwe RSACryptoServiceProvider();
            string plaintext = sSource;
            RSA. FromXmlString (sPublicKey);
            byte[] cipherbytes;
            byte[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false);
            Cipherbytes = RSA. Encrypt(Encoding.UTF8.GetBytes(plaintext), vals);



            StringBuilder sbString = nieuwe StringBuilder();
            voor (int i = 0; Ik < cipherbytes. Lengte; i++)
            {
                sbString.Append(cipherbytes)+ ",");
            }



3. Decryptie:



  /// <summary>
        /// RSA Decrypt
        /// </summary>
        <param name="sSource">Source-string</param>
        <param name="sPrivateKey">Private Key</param>
        /// <returns></returns>
        publieke statische string DecryptString (String sSource, string sPrivateKey)
        {
            RSACryptoServiceProvider rsa = nieuwe RSACryptoServiceProvider();
            RSA. FromXmlString(sPrivateKey);
            byte[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false);
            string[] sBytes = sSource.Split(',');



            voor (int j = 0; j < sBytes.Length; j++)
            {
                als (sBytes[j] != "")
                {
                    byteEn[j] = Byte.Parse(sBytes[j]);
                }
            }
            byte[] plaintbytes = RSA. Decrypt(byteEn, false);
            return Encoding.UTF8.GetString(plaintbytes);
        }
            return sbString.ToString();
        }





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

RSA-codecode voor versleuteling en ontsleuteling:

met behulp van System;
met behulp van System.Collections.Generic;
met behulp van System.Linq;
gebruik van System.Text;
gebruik van System.Security.Cryptography;

naamruimte MyRSA
naamruimte 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 (string base64code)

{

    Probeer het

    {



        Maak een UnicodeEncoder om te converteren tussen bytearray en string.

        UnicodeEncoding ByteConverter =new UnicodeEncoding();



        Maak een nieuwe instantie van RSACryptoServiceProvider aan om te genereren

        publieke en private sleutelgegevens.

        RSACryptoServiceProvider RSA =nieuwe RSACryptoServiceProvider();

        RSA. FromXmlString (privésleutel);



        byte[] versleutelde Data;

        byte[] ontsleuteldeData;

        encryptedData = Convert.FromBase64String(base64code);



        Geef de gegevens door aan DECRYPT, de privésleutelinformatie

        (met RSACryptoServiceProvider.ExportParameters(true),

        en een booleaanse vlag die geen OAEP-padding aangeeft.

        decryptedData = RSADecrypt(

            versleutelde data, RSA. ExportParameters(waar), onwaar);



        Toon de ontsleutelde platte tekst aan de console.

        return ByteConverter.GetString(decryptedData);

    }

    catch (uitzondering exc.)

    {

        Uitzonderingen.LogException(exc);

        Console.WriteLine (bijv. Boodschap);

        terugkeer"";

    }

}



staticpublicstring Encrypt(string toEncryptString)

{

    Probeer het

    {

        Maak een UnicodeEncoder om te converteren tussen bytearray en string.

        UnicodeEncoding ByteConverter =new UnicodeEncoding();



        Maak byte-arrays om originele, versleutelde en ontsleutelde data te bewaren.

        byte[] dataToEncrypt =

            ByteConverter.GetBytes(toEncryptString);

        byte[] versleutelde Data;

        byte[] ontsleuteldeData;



        Maak een nieuwe instantie van RSACryptoServiceProvider aan om te genereren

        publieke en private sleutelgegevens.

        RSACryptoServiceProvider RSA =nieuwe RSACryptoServiceProvider();



        RSA. FromXmlString (privésleutel);



        Geef de gegevens door aan ENCRYPT, de publieke sleutelinformatie

        (met RSACryptoServiceProvider.ExportParameters(false),

        en een booleaanse vlag die geen OAEP-padding aangeeft.

        encryptedData = RSAEncrypt(

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



        string base64code = Convert.ToBase64String(encryptedData);

        Returner base64code;

    }

    catch (uitzondering exc.)

    {

        Vang deze uitzondering als de encryptie dat wel heeft gedaan

        niet slagen.

        Uitzonderingen.LogException(exc);

        Console.WriteLine (bijv. Boodschap);

        terugkeer"";

    }







}



staticprivatebyte[] RSAEncrypt(

    byte[] DataToEncrypt,

    RSAParameters RSAKeyInfo,

    bool DoOAEPPadding)

{

    Probeer het

    {

        Maak een nieuwe instantie van RSACryptoServiceProvider aan.

        RSACryptoServiceProvider RSA =nieuwe RSACryptoServiceProvider();



        Importeer de RSA Key-informatie. Dit hoeft alleen maar

        om de publieke sleutelinformatie op te nemen.

        RSA. ImportParameters(RSAKeyInfo);



        Versleutel de passeerde bytearray en specificeer OAEP-padding.  

        OAEP-opvulling is alleen beschikbaar op Microsoft Windows XP of

        later.  

        Geef RSA terug. Versleutelen (DataToEncrypt, DoOAEPPadding);

    }

    Vang en toon een CryptographicException  

    naar de console.

    vangen (CryptographicException e)

    {

        Uitzonderingen.LogUitzondering(e);

        Console.WriteLine(e.Message);



        returnnull;

    }



}



staticprivatebyte[] RSADecrypt(

    byte[] DataToDecrypt,

    RSAParameters RSAKeyInfo,

    bool DoOAEPPadding)

{

    Probeer het

    {

        Maak een nieuwe instantie van RSACryptoServiceProvider aan.

        RSACryptoServiceProvider RSA =nieuwe RSACryptoServiceProvider();



        Importeer de RSA Key-informatie. Dit heeft nodig

        om de privésleutelinformatie op te nemen.

        RSA. ImportParameters(RSAKeyInfo);



        Decrypteer de passe byte-array en specificeer OAEP-padding.  

        OAEP-opvulling is alleen beschikbaar op Microsoft Windows XP of

        later.  

        Geef RSA terug. Decrypt(DataToDecrypt, DoOAEPPadding);

    }

    Vang en toon een CryptographicException  

    naar de console.

    vangen (CryptographicException e)

    {

        Uitzonderingen.LogUitzondering(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.         }
Code kopiëren






Vorig:Bouw je eigen persoonlijke forum gratis, je kunt geld verdienen door namens jou te bouwen, en je kunt het in drie minuten doen
Volgend:Gebruik van onclick en href in de A-tag in HTML
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com