Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 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(false);
            возвратные ключи;
        }



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"), false);
            Шифрбайты = 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">Private Key</param>
        /// <returns></returns>
        публичная статическая строка 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]);
                }
            }
            byte[] plaintbytes = 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 (исключение, исключение)

    {

        Исключения.LogException(exc);

        Console.WriteLine(exc. Message);

        return";

    }

}



staticpublicstring Encrypt(string toEncryptString)

{

    Попробуй

    {

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

        UnicodeEncoding ByteConverter = новый UnicodeEncoding();



        Создайте массивы байтов для хранения оригинальных, зашифрованных и расшифрованных данных.

        byte[] 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 (ложь), ложь);



        строка base64code = Convert.ToBase64String(encryptedData);

        return base64code;

    }

    catch (исключение, исключение)

    {

        Поймите это исключение на случай, если шифрование сработало

        не добиться успеха.

        Исключения.LogException(exc);

        Console.WriteLine(exc. Message);

        return";

    }







}



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(

    byte[] 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