Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 18182|Відповідь: 0

[Джерело] C# детально реалізує шифрування та розшифрування RSA

[Копіювати посилання]
Опубліковано 04.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(неправди);
            return sKeys;
        }



2. Шифрування:



      /// <summary>
        /// RSA Encrypt
        /// </summary>
       <param name="sSource" >Вихідний рядок</param>
        <param name="sPublicKey" >публічний ключ</param>
        /// <returns></returns>
        публічний статичний рядок EncryptString(рядок sSource,рядок sPublicKey)
        {
            RSACryptoServiceProvider rsa = новий RSACryptoServiceProvider();
            string opentext = sSource;
            RSA. FromXmlString(sPublicKey);
            байт[] шифробайтів;
            byte[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), неправда);
            Cipherbytes = RSA. Encrypt(Encoding.UTF8.GetBytes(відкритий текст), неправда);



            StringBuilder sbString = новий StringBuilder();
            для (int i = 0; Я < шифробайтами. Довжина; i++)
            {
                sbString.Append(cipherbytes+ ",");
            }



3. Розшифрування:



  /// <summary>
        Розшифрування RSA
        /// </summary>
        <param name="sSource">Рядок джерела</param>
        <param name="sPrivateKey">Приватний ключ</param>
        /// <returns></returns>
        публічний статичний рядок DecryptString(String sSource, рядок sPrivateKey)
        {
            RSACryptoServiceProvider rsa = новий RSACryptoServiceProvider();
            RSA. FromXmlString(sPrivateKey);
            byte[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), неправда);
            string[] sBytes = sSource.Split(',');



            для (int j = 0; j < sBytes.Довжина; j++)
            {
                if (sBytes[j] != "")
                {
                    byteEn[j] = Byte.Parse(sBytes[j]);
                }
            }
            байт[] Plaintbytes = RSA. Decrypt(byteEn, false);
            return Encoding.UTF8.GetString(plaintbytes);
        }
            повернути 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 =new 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 (виключно з виключенням)

    {

        Винятки.LogException(exc);

        Console.WriteLine(exc. Повідомлення);

        повернутися";

    }

}



staticpublicstring Encrypt(string toEncryptString)

{

    спробуйте

    {

        Створіть UnicodeEncoder для конвертації між масивом байтів і рядком.

        UnicodeEncoding ByteConverter =new 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 (неправда), хибна);



        string base64code = Convert.ToBase64String(encryptedData);

        повернути base64code;

    }

    catch (виключно з виключенням)

    {

        Зафіксуйте цей виняток на випадок, якщо шифрування спрацювало

        не досягти успіху.

        Винятки.LogException(exc);

        Console.WriteLine(exc. Повідомлення);

        повернутися";

    }







}



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)

    {

        Винятки.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)

    {

        Винятки.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