Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 18182|Antwort: 0

[Quelle] C# implementiert RSA-Verschlüsselung und -Entschlüsselung im Detail

[Link kopieren]
Veröffentlicht am 04.11.2015 12:37:23 | | |
Die Projektanforderungen sind: einen privaten und öffentlichen Schlüssel generieren, mit öffentlichem Schlüssel verschlüsseln, mit privatem Schlüssel entschlüsseln, ich habe es so implementiert,



Ich hoffe, Freunden helfen zu können, die dieses Bedürfnis haben.







Der Quellcode ist wie folgt:



1. Erzeugen Sie ein Schlüsselpaar:



          /// <summary>
        Private Key und Public Key ARR[0] für private Schlüssel arr[1] für Public Key generieren
        /// </summary>
        /// <returns></returns>
        öffentliche statische Zeichenkette[] GenerateKeys()
        {
            string[] sKeys = neuer String[2];
            RSACryptoServiceProvider rsa = neuer RSACryptoServiceProvider();
            sKeys[0] = rsa. ToXmlString(true);
            sKeys[1] = rsa. ToXmlString (falsch);
            sKeys zurück;
        }



2. Verschlüsselung:



      /// <summary>
        RSA-Verschlüsselung
        /// </summary>
       <param name="sSource" >Source-String</param>
        <param name="sPublicKey" >Public Key</param>
        /// <returns></returns>
        öffentliche statische Zeichenkette EncryptString (String sSource,String sPublicKey)
        {
            RSACryptoServiceProvider rsa = neuer RSACryptoServiceProvider();
            String-Klartext = sSource;
            RSA. FromXmlString (sPublicKey);
            Byte[] Chiffrebytes;
            byte[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false);
            Cipherbytes = RSA. Encrypt(Encoding.UTF8.GetBytes(Klartext), falsch);



            StringBuilder sbString = neuer StringBuilder();
            für (int i = 0; Ich < Cipherbytes. Länge; i++)
            {
                sbString.Append(zipherbytes)+ ",");
            }



3. Entschlüsselung:



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



            für (int j = 0; j < sBytes.Length; j++)
            {
                wenn (sBytes[j] != "")
                {
                    byteEn[j] = Byte.Parse(sBytes[j]);
                }
            }
            byte[] plaintbytes = rsa. Entschlüsseln (byteEn, falsch);
            return Encoding.UTF8.GetString(plaintbytes);
        }
            return sbString.ToString();
        }





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

RSA-Verschlüsselungs- und Entschlüsselungscode:

mit System;
mit System.Collections.Generic;
mit System.Linq;
mit System.Text;
unter Verwendung von System.Security.Cryptography;

Namensraum MyRSA
Namensraum 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)

{

    Versuch es

    {



        Erstellen Sie einen UnicodeEncoder, um zwischen Byte-Array und String zu konvertieren.

        UnicodeEncoding ByteConverter =new UnicodeEncoding();



        Erstellen Sie eine neue Instanz von RSACryptoServiceProvider zur Generierung

        öffentliche und private Schlüsseldaten.

        RSACryptoServiceProvider RSA =neuer RSACryptoServiceProvider();

        RSA. FromXmlString (privatSchlüssel);



        byte[] verschlüsselte Daten;

        byte[] decryptedData;

        encryptedData = Convert.FromBase64String(base64code);



        Geben Sie die Daten an DECRYPT, die privaten Schlüsselinformationen weiter.

        (unter Verwendung von RSACryptoServiceProvider.ExportParameters(true),

        und eine boolesche Flagge, die keine OAEP-Polsterung angibt.

        decryptedData = RSADecrypt(

            verschlüsselte Daten, RSA. ExportParameters(true), false);



        Zeigen Sie den entschlüsselten Klartext der Konsole an.

        return ByteConverter.GetString (decryptedData);

    }

    Catch (Ausnahme außer)

    {

        Ausnahmen.LogException (u.a.);

        Console.WriteLine (z. B. Botschaft);

        zurückkehren"";

    }

}



staticpublicstring Encrypt(string toEncryptString)

{

    Versuch es

    {

        Erstellen Sie einen UnicodeEncoder, um zwischen Byte-Array und String zu konvertieren.

        UnicodeEncoding ByteConverter =new UnicodeEncoding();



        Erstellen Sie Byte-Arrays, um originale, verschlüsselte und entschlüsselte Daten zu speichern.

        byte[] dataToEncrypt =

            ByteConverter.GetBytes(toEncryptString);

        byte[] verschlüsselte Daten;

        byte[] decryptedData;



        Erstellen Sie eine neue Instanz von RSACryptoServiceProvider zur Generierung

        öffentliche und private Schlüsseldaten.

        RSACryptoServiceProvider RSA =neuer RSACryptoServiceProvider();



        RSA. FromXmlString (privatSchlüssel);



        Geben Sie die Daten an ENCRYPT, die öffentlichen Schlüsselinformationen, weiter.

        (unter Verwendung von RSACryptoServiceProvider.ExportParameters(false),

        und eine boolesche Flagge, die keine OAEP-Polsterung angibt.

        encryptedData = RSAEncrypt(

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



        String base64code = Convert.ToBase64String(encryptedData);

        Geben Sie base64code zurück;

    }

    Catch (Ausnahme außer)

    {

        Fangen Sie diese Ausnahme auf, falls die Verschlüsselung es getan hat

        nicht erfolgreich sein.

        Ausnahmen.LogException (u.a.);

        Console.WriteLine (z. B. Botschaft);

        zurückkehren"";

    }







}



staticprivatebyte[] RSAEncrypt(

    byte[] DataToEncrypt,

    RSAParameters RSAKeyInfo,

    bool DoOAEPPadding)

{

    Versuch es

    {

        Erstelle eine neue Instanz von RSACryptoServiceProvider.

        RSACryptoServiceProvider RSA =neuer RSACryptoServiceProvider();



        Importiere die RSA-Schlüsselinformationen. Das braucht nur

        um die öffentlichen Schlüsselinformationen einzubeziehen.

        RSA. ImportParameters(RSAKeyInfo);



        Verschlüssele das passierte Byte-Array und spezifiziere OAEP-Padding.  

        OAEP-Polsterung ist nur unter Microsoft Windows XP oder

        Später.  

        RSA zurück. Verschlüsseln (DataToEncrypt, DoOAEPPadding);

    }

    Fangen und zeigen Sie eine CryptographicException an  

    zur Konsole.

    catch (CryptographicException e)

    {

        Ausnahmen.LogException(e);

        Console.WriteLine(e.Message);



        returnnull;

    }



}



staticprivatebyte[] RSADecrypt(

    byte[] DataToDecrypt,

    RSAParameters RSAKeyInfo,

    bool DoOAEPPadding)

{

    Versuch es

    {

        Erstelle eine neue Instanz von RSACryptoServiceProvider.

        RSACryptoServiceProvider RSA =neuer RSACryptoServiceProvider();



        Importiere die RSA-Schlüsselinformationen. Das braucht

        um die privaten Schlüsselinformationen einzubeziehen.

        RSA. ImportParameters(RSAKeyInfo);



        Entschlüsseln Sie das passierte Byte-Array und spezifizieren Sie OAEP-Padding.  

        OAEP-Polsterung ist nur unter Microsoft Windows XP oder

        Später.  

        RSA zurück. Entschlüsseln (DataToDecrypt, DoOAEPPadding);

    }

    Fangen und zeigen Sie eine CryptographicException an  

    zur Konsole.

    catch (CryptographicException e)

    {

        Ausnahmen.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.         }
Code kopieren






Vorhergehend:Erstelle dein eigenes persönliches Forum kostenlos, du kannst Geld verdienen, indem du für dich aufbaust, und das in drei Minuten
Nächster:Verwendung von onclick und href im A-Tag im HTML
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com