Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 18182|Отговор: 0

[Източник] C# реализира RSA криптиране и декриптиране в детайли

[Копирай линк]
Публикувано в 4.11.2015 г. 12:37:23 ч. | | |
Проектът изисква: генериране на частен и публичен ключ, криптиране с публичен ключ, декриптиране с частен ключ, реализирах го така,



Надявам се да бъда полезен на приятели, които имат тази нужда.







Изходният код е следният:



1. Генериране на двойка ключове:



          /// <summary>
        генерирай частен ключ и публичен ключ arr[0] за частен ключ arr[1] за публичен ключ
        /// </summary>
        /// <returns></returns>
        публичен статичен низ[] GenerateKeys()
        {
            string[] sKeys = нова струна[2];
            RSACryptoServiceProvider rsa = нов RSACryptoServiceProvider();
            sKeys[0] = rsa. ToXmlString(true);
            sKeys[1] = rsa. ToXmlString(false);
            връщане на ключове;
        }



2. Криптиране:



      /// <summary>
        RSA Криптиране
        /// </summary>
       <param name="sSource" >Изходен низ</param>
        <param name="sPublicKey" >публичен ключ</param>
        /// <returns></returns>
        публичен статичен низ EncryptString(низ sSource,низ sPublicKey)
        {
            RSACryptoServiceProvider rsa = нов RSACryptoServiceProvider();
            string plaintext = sSource;
            RSA. FromXmlString(sPublicKey);
            byte[] cipherbytes;
            byte[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false);
            Cipherbytes = RSA. Encrypt(Encoding.UTF8.GetBytes(открит текст), false);



            StringBuilder sbString = нов StringBuilder();
            за (int i = 0; Аз < cipherbytes. Дължина; i++)
            {
                sbString.Append(cipherbytes+ ",");
            }



3. Декриптиране:



  /// <summary>
        RSA Декрипт
        /// </summary>
        <param name="sSource">Изходен низ</param>
        <param name="sPrivateKey">Private Key</param>
        /// <returns></returns>
        public static string DecryptString(String sSource, низ sPrivateKey)
        {
            RSACryptoServiceProvider rsa = нов RSACryptoServiceProvider();
            RSA. FromXmlString(sPrivateKey);
            byte[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false);
            string[] sBytes = sSource.Split(',');



            за (int j = 0; j < sBytes.Length; j++)
            {
                ако (sBytes[j] != "")
                {
                    byteEn[j] = Byte.Parse(sBytes[j]);
                }
            }
            байт[] жалоби = rsa. Decrypt(byteEn, false);
            return Encoding.UTF8.GetString(plaintbytes);
        }
            return sbString.ToString();
        }





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

Изходен код за криптиране и декриптиране на RSA:

използвайки System;
използвайки System.Collections.Generic;
използвайки System.Linq;
използвайки System.Text;
използвайки System.Security.Cryptography;

пространството за имена MyRSA
пространството за имена MyRSA

{

публична класа 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)

{

    Опитай

    {



        Създайте UnicodeEncoder за конвертиране между байтов масив и низ.

        UnicodeEncoding ByteConverter =нов UnicodeEncoding();



        Създайте нов инстанс на RSACryptoServiceProvider за генериране

        Публични и частни ключови данни.

        RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();

        RSA. FromXmlString(privateKey);



        byte[] encryptedData;

        byte[] decryptedData;

        encryptedData = Convert.FromBase64String(base64code);



        Предайте данните към DECRYPT, информацията за частния ключ

        (използвайки RSACryptoServiceProvider.ExportParameters(true),

        и булев флаг, който показва липса на OAEP.

        decryptedData = RSADecrypt(

            криптирани данни, RSA. ExportParameters (true), false);



        Покажи декриптирания открит текст на конзолата.

        return ByteConverter.GetString(decryptedData);

    }

    catch (Изключение с изключение)

    {

        Exceptions.LogException(exc);

        Console.WriteLine(exc. Message);

        връщане";

    }

}



staticpublicstring Encrypt(низ toEncryptString)

{

    Опитай

    {

        Създайте UnicodeEncoder за конвертиране между байтов масив и низ.

        UnicodeEncoding ByteConverter =нов UnicodeEncoding();



        Създайте байтови масиви за съхранение на оригинални, криптирани и декриптирани данни.

        байт[] dataToEncrypt =

            ByteConverter.GetBytes(toEncryptString);

        byte[] encryptedData;

        byte[] decryptedData;



        Създайте нов инстанс на RSACryptoServiceProvider за генериране

        Публични и частни ключови данни.

        RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();



        RSA. FromXmlString(privateKey);



        Предайте данните на ENCRYPT, информацията за публичния ключ

        (използвайки RSACryptoServiceProvider.ExportParameters(false),

        и булев флаг, който показва липса на OAEP.

        encryptedData = RSAEncrypt(

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



        низ base64code = Convert.ToBase64String(encryptedData);

        return base64code;

    }

    catch (Изключение с изключение)

    {

        Хванете това изключение, в случай че криптирането е направено

        Да не успее.

        Exceptions.LogException(exc);

        Console.WriteLine(exc. Message);

        връщане";

    }







}



staticprivatebyte[] RSAEncrypt(

    байт[] DataToEncrypt,

    RSAParameters RSAKeyInfo,

    bool DoOAEPPadding)

{

    Опитай

    {

        Създайте нов инстанция на RSACryptoServiceProvider.

        RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();



        Импортирайте информацията за RSA Key. Това е достатъчно само

        да включи информацията за публичния ключ.

        RSA. ImportParameters (RSAKeyInfo);



        Криптирайте подадения байтов масив и задайте OAEP допълване.  

        OAEP подпълването е налично само за Microsoft Windows XP или

        По-късно.  

        Връщане на RSA. Encrypt(DataToEncrypt, DoOAEPPadding);

    }

    Захващане и показване на CryptographicException  

    към конзолата.

    catch (CryptographicException e)

    {

        Exceptions.LogException(e);

        Console.WriteLine(e.Message);



        returnnull;

    }



}



staticprivatebyte[] RSADecrypt(

    байт[] DataToDecrypt,

    RSAParameters RSAKeyInfo,

    bool DoOAEPPadding)

{

    Опитай

    {

        Създайте нов инстанция на RSACryptoServiceProvider.

        RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();



        Импортирайте информацията за RSA Key. Това се нуждае от

        да включи информация за частния ключ.

        RSA. ImportParameters (RSAKeyInfo);



        Декриптирайте подадения байтов масив и задайте OAEP подсилване.  

        OAEP подпълването е налично само за Microsoft Windows XP или

        По-късно.  

        Връщане на RSA. Decrypt(DataToDecrypt, DoOAEPPadding);

    }

    Захващане и показване на CryptographicException  

    към конзолата.

    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.         }
Копирай код






Предишен:Създайте собствен личен форум безплатно, можете да печелите пари, като градите от ваше име, и можете да го направите за три минути
Следващ:Използване на onclick и href в A таг в HTML
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com