Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 18182|Resposta: 0

[Fonte] C# implementa criptografia e descriptografia RSA em detalhes

[Copiar link]
Publicado em 04/11/2015 12:37:23 | | |
Os requisitos do projeto são: gerar uma chave privada e uma chave pública, criptografar com chave pública, descriptografar com chave privada, implementei assim,



Espero poder ajudar amigos que têm essa necessidade.







O código-fonte é o seguinte:



1. Gerar um par de chaves:



          /// <summary>
        Gerar chave privada e chave pública ARR[0] para chave privada ARR[1] para chave pública
        /// </summary>
        /// <returns></returns>
        string estático público[] GenerateKeys()
        {
            string[] sKeys = nova String[2];
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            sKeys[0] = rsa. ToXmlString (verdadeiro);
            sKeys[1] = rsa. ToXmlString (falso);
            retorno de sKeys;
        }



2. Criptografia:



      /// <summary>
        /// RSA Encrypt
        /// </summary>
       <param name="sSource" >Cadeia de Source</param>
        <param name="sPublicKey" >chave pública</param>
        /// <returns></returns>
        string estática pública EncryptString(string sSource,string sPublicKey)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            string texto simples = sSource;
            RSA. FromXmlString (sPublicKey);
            cipherbitas de bytes;
            byte[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false);
            cipherbytes = RSA. Encrypt(Encoding.UTF8.GetBytes(texto simples), falso);



            StringBuilder sbString = novo StringBuilder();
            para (int i = 0; Eu < cipherbytes. Comprimento; i++)
            {
                sbString.Append(cipherbytes+ ",");
            }



3. Descriptografia:



  /// <summary>
        Descriptografia RSA
        /// </summary>
        <param name="sSource">Cadeia de Source</param>
        <param name="sPrivateKey">Chave Privada</param>
        /// <returns></returns>
        string estática pública DecryptString(String sSource, string sPrivateKey)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            RSA. FromXmlString(sPrivateKey);
            byte[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false);
            string[] sBytes = sSource.Split(',');



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





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

Código-fonte de criptografia e descriptografia RSA:

usando o Sistema;
usando System.Collections.Generic;
usando System.Linq;
usando System.Text;
usando System.Security.Cryptography;

Namespace MyRSA
Namespace MyRSA

{

Classe pública 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)

{

    tente

    {



        Crie um UnicodeEncoder para converter entre array de bytes e string.

        UnicodeEncoding ByteConverter = novo UnicodeEncoding ();



        Crie uma nova instância de RSACryptoServiceProvider para gerar

        Dados de chave pública e privada.

        RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();

        RSA. FromXmlString (chave privada);



        byte[] criptografado Data;

        byte[] decryptedData;

        encryptedData = Convert.FromBase64String(base64code);



        Passe os dados para o DECRYPT, as informações da chave privada

        (usando RSACryptoServiceProvider.ExportParameters(true),

        e uma bandeira booleana que não especifica preenchimento OAEP.

        decryptedData = RSADecrypt(

            encryptedData, RSA. ExportParameters (true), false);



        Exiba o texto simples descriptografado no console.

        return ByteConverter.GetString(decryptedData);

    }

    captura (exceção exc)

    {

        Exceptions.LogException(exc);

        Console.WriteLine(exc. Mensagem);

        retornar"";

    }

}



staticpublicstring Encrypt(string paraEncryptString)

{

    tente

    {

        Crie um UnicodeEncoder para converter entre array de bytes e string.

        UnicodeEncoding ByteConverter = novo UnicodeEncoding ();



        Crie arrays de bytes para armazenar dados originais, criptografados e descriptografados.

        byte[] dataToEncrypt =

            ByteConverter.GetBytes(paraEncriptarString);

        byte[] criptografado Data;

        byte[] decryptedData;



        Crie uma nova instância de RSACryptoServiceProvider para gerar

        Dados de chave pública e privada.

        RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();



        RSA. FromXmlString (chave privada);



        Passe os dados para o ENCRYPT, a informação de chave pública

        (usando RSACryptoServiceProvider.ExportParameters(false),

        e uma bandeira booleana que não especifica preenchimento OAEP.

        encryptedData = RSAEncrypt(

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



        string base64code = Convert.ParaBase64String(encryptedData);

        devolver base64code;

    }

    captura (exceção exc)

    {

        Observe essa exceção caso a criptografia tenha feito isso

        não ter sucesso.

        Exceptions.LogException(exc);

        Console.WriteLine(exc. Mensagem);

        retornar"";

    }







}



staticprivatebyte[] RSAEncrypt(

    byte[] DataToEncrypt,

    RSAParameters RSAKeyInfo,

    bool DoOAEPPadimento)

{

    tente

    {

        Crie uma nova instância do RSACryptoServiceProvider.

        RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();



        Importe as informações da chave RSA. Isso só precisa

        para incluir as informações da chave pública.

        RSA. ImportParameters(RSAKeyInfo);



        Criptografe o array de bytes passados e especifique o preenchimento OAEP.  

        O preenchimento OAEP está disponível apenas no Microsoft Windows XP ou

        Depois.  

        Devolva RSA. Encrypt(DataToEncrypt, DoOAEPPadding);

    }

    Capture e exiba uma CryptographicException  

    para o console.

    catch (CryptographicException e)

    {

        Exceções.LogException(e);

        Console.WriteLine(e.Message);



        returnnull;

    }



}



staticprivatebyte[] RSADecrypt(

    byte[] DataToDecrypt,

    RSAParameters RSAKeyInfo,

    bool DoOAEPPadimento)

{

    tente

    {

        Crie uma nova instância do RSACryptoServiceProvider.

        RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();



        Importe as informações da chave RSA. Isso precisa

        para incluir as informações da chave privada.

        RSA. ImportParameters(RSAKeyInfo);



        Descriptografe o array de bytes passados e especifique o preenchimento OAEP.  

        O preenchimento OAEP está disponível apenas no Microsoft Windows XP ou

        Depois.  

        Devolva RSA. Decrypt(DataToDecrypt, DoOAEPPadding);

    }

    Capture e exiba uma CryptographicException  

    para o console.

    catch (CryptographicException e)

    {

        Exceções.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.         }
Copiar código






Anterior:Construa seu próprio fórum pessoal de graça, você pode ganhar dinheiro construindo em seu nome, e pode fazer isso em três minutos
Próximo:Uso de onclick e href na tag A em HTML
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com