Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 18182|Odgovoriti: 0

[Vir] C# podrobno izvaja RSA šifriranje in dešifriranje

[Kopiraj povezavo]
Objavljeno na 4. 11. 2015 12:37:23 | | |
Zahteve projekta: ustvari zasebni in javni ključ, šifrirajte z javnim ključem, dešifrirajte z zasebnim ključem, implementiram takole,



Upam, da bom lahko pomagal prijateljem, ki imajo to potrebo.







Izvorna koda je naslednja:



1. Ustvarite par ključev:



          /// <summary>
        Generirajte zasebni ključ in javni ključ ARR[0] za zasebni ključ ARR[1] za javni ključ
        /// </summary>
        /// <returns></returns>
        javni statični niz[] GenerateKeys()
        {
            string[] sKeys = nov string[2];
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            sKeys[0] = rsa. ToXmlString(true);
            sKeys[1] = rsa. ToXmlString(false);
            vrni sKeys;
        }



2. Šifriranje:



      /// <summary>
        /// RSA Encrypt
        /// </summary>
       <ime parametra="sSource" >Izvorni niz</param>
        <ime parametra="sPublicKey" >javni ključ</param>
        /// <returns></returns>
        javni statični niz EncryptString(string sSource,string sPublicKey)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            string plaintext = sSource;
            RSA. FromXmlString(sPublicKey);
            bajti[] šifriratnih bajtov;
            bajt[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false);
            Cipherbytes = RSA. Encrypt(Encoding.UTF8.GetBytes(navadno besedilo), false);



            StringBuilder sbString = novi StringBuilder();
            za (int i = 0; Jaz < šifrirne bajte. Dolžina; i++)
            {
                sbString.Append(cipherbytes+ ",");
            }



3. Dešifriranje:



  /// <summary>
        RSA Dešifriranje
        /// </summary>
        <param name="sSource">Source string</param>
        <ime parametra="sPrivateKey">Private Key</param>
        /// <returns></returns>
        javni statični niz DecryptString(String sSource, string sPrivateKey)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            RSA. FromXmlString(sPrivateKey);
            bajt[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false);
            string[] sBytes = sSource.Split(',');



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





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

Izvorna koda za šifriranje in dešifriranje RSA:

z uporabo System;
z uporabo System.Collections.Generic;
z uporabo System.Linq;
z uporabo System.Text;
uporaba System.Security.Cryptography;

imenski prostor MyRSA
imenski prostor 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)

{

    poskusi

    {



        Ustvarite UnicodeEncoder za pretvorbo med bajtnim poljem in nizom.

        UnicodeEncoding ByteConverter =nov UnicodeEncoding();



        Ustvarite novo instanco RSACryptoServiceProvider za generiranje

        Javni in zasebni ključni podatki.

        RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();

        RSA. FromXmlString(privateKey);



        bajt[] šifrirani podatki;

        bajt[] dešifrirani podatki;

        encryptedData = Convert.FromBase64String(base64code);



        Podatke posredujte v DECRYPT, podatke o zasebnem ključu

        (z uporabo RSACryptoServiceProvider.ExportParameters(true),

        in boolean zastavo, ki ne določa OAEP polnila.

        decryptedData = RSADecrypt(

            šifrirani podatki, RSA. ExportParameters(true), false);



        Prikazati dešifrirano izvirno besedilo konzoli.

        return ByteConverter.GetString(decryptedData);

    }

    ulov (Izjema exc)

    {

        Exceptions.LogException(exc);

        Console.WriteLine(izv. Sporočilo);

        vrni"";

    }

}



staticpublicstring Encrypt(string toEncryptString)

{

    poskusi

    {

        Ustvarite UnicodeEncoder za pretvorbo med bajtnim poljem in nizom.

        UnicodeEncoding ByteConverter =nov UnicodeEncoding();



        Ustvarite bajtna polja za shranjevanje izvirnih, šifriranih in dešifriranih podatkov.

        byte[] dataToEncrypt =

            ByteConverter.GetBytes(toEncryptString);

        bajt[] šifrirani podatki;

        bajt[] dešifrirani podatki;



        Ustvarite novo instanco RSACryptoServiceProvider za generiranje

        Javni in zasebni ključni podatki.

        RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();



        RSA. FromXmlString(privateKey);



        Posredovanje podatkov v ENCRYPT, informacije o javnem ključu

        (z uporabo RSACryptoServiceProvider.ExportParameters(false),

        in boolean zastavo, ki ne določa OAEP polnila.

        encryptedData = RSAEncrypt(

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



        string base64code = Pretvori.ToBase64String(encryptedData);

        vrni base64code;

    }

    ulov (Izjema exc)

    {

        Ujemite to izjemo, če je šifriranje to storilo

        ne uspeti.

        Exceptions.LogException(exc);

        Console.WriteLine(izv. Sporočilo);

        vrni"";

    }







}



staticprivatebyte[] RSAEncrypt(

    bajt[] DataToEncrypt,

    RSAParameters RSAKeyInfo,

    bool DoOAEPPadding)

{

    poskusi

    {

        Ustvarite novo instanco RSACryptoServiceProvider.

        RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();



        Uvozite podatke o RSA ključu. To je dovolj

        vključiti informacije o javnem ključu.

        RSA. ImportParameters(RSAKeyInfo);



        Šifrirajte polje prenesenih bajtov in določite OAEP polnilo.  

        OAEP oblazinjenje je na voljo le na Microsoft Windows XP ali

        Kasneje.  

        vrni RSA. Encrypt(DataToEncrypting, DoOAEPPadding);

    }

    Ujemite in prikažite CryptographicException  

    Na konzolo.

    catch (CryptographicException e)

    {

        Exceptions.LogException(e);

        Console.WriteLine(e.Message);



        returnnull;

    }



}



staticprivatebyte[] RSADecrypt(

    bajt[] DataToDecrypt,

    RSAParameters RSAKeyInfo,

    bool DoOAEPPadding)

{

    poskusi

    {

        Ustvarite novo instanco RSACryptoServiceProvider.

        RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();



        Uvozite podatke o RSA ključu. To potrebuje

        da vključi podatke o zasebnem ključu.

        RSA. ImportParameters(RSAKeyInfo);



        Dešifriraj preneseno bajtno polje in določi OAEP polding.  

        OAEP oblazinjenje je na voljo le na Microsoft Windows XP ali

        Kasneje.  

        vrni RSA. Dešifriranje(DataToDecrypt, DoOAEPPadding);

    }

    Ujemite in prikažite CryptographicException  

    Na konzolo.

    catch (CryptographicException e)

    {

        Exceptions.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.         }
Kopiraj kodo






Prejšnji:Zgradite svoj osebni forum brezplačno, lahko zaslužite z gradnjo v svojem imenu in to v treh minutah
Naslednji:Uporaba onclick in href v oznaki A v HTML
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com