Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 18182|Respuesta: 0

[Fuente] C# implementa el cifrado y descifrado RSA en detalle

[Copiar enlace]
Publicado en 4/11/2015 12:37:23 | | |
Los requisitos del proyecto son: generar una clave privada y una clave pública, cifrar con clave pública, descifrar con clave privada, lo implementé así,



Espero poder ayudar a amigos que tengan esta necesidad.







El código fuente es el siguiente:



1. Generar un par de claves:



          /// <summary>
        Generar clave privada y clave pública ARR[0] para clave privada ARR[1] para clave pública
        /// </summary>
        /// <returns></returns>
        cadena estática pública[] GenerateKeys()
        {
            string[] sKeys = nueva String[2];
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            sKeys[0] = rsa. ToXmlString (verdadero);
            sKeys[1] = rsa. ToXmlString (falso);
            devolver sKeys;
        }



2. Cifrado:



      /// <summary>
        Cifrado RSA
        /// </summary>
       <param name="sSource" >Cadena de origen</param>
        <param name="sPublicKey" >clave pública</param>
        /// <returns></returns>
        cadena pública estática EncryptString(cadena sSource, cadena sPublicKey)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            texto plano de cadena = sSource;
            RSA. FromXmlString (sPublicKey);
            Byte[] cipherbitos;
            byte[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false);
            cipherbytes = RSA. Encrypt (Encoding.UTF8.GetBytes(texto plano), false);



            StringBuilder sbString = nuevo StringBuilder();
            para (int i = 0; Yo < Cipherbytes. Longitud; i++)
            {
                sbString.Append(cipherbytes+ ",");
            }



3. Descifrado:



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



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





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

Código fuente de cifrado y descifrado RSA:

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

Espacio de nombres MyRSA
Espacio de nombres MyRSA

{

públicaclass 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(cadena base64code)

{

    Prueba

    {



        Crea un UnicodeEncoder para convertir entre el array de bytes y la cadena.

        UnicodeEncoding ByteConverter = nuevo UnicodeEncoding();



        Crear una nueva instancia de RSACryptoServiceProvider para generar

        datos de clave pública y privada.

        RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();

        RSA. FromXmlString (llave privada);



        byte[] encryptedData;

        byte[] descifrado Data;

        encryptedData = Convert.FromBase64String(base64code);



        Pasar los datos a DECRYPT, la información de la clave privada

        (usando RSACryptoServiceProvider.ExportParameters(true),

        y una bandera booleana que especifica que no hay relleno OAEP.

        decryptedData = RSADecrypt(

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



        Muestra el texto plano descifrado en la consola.

        return ByteConverter.GetString(decryptedData);

    }

    captura (excepciones exc)

    {

        Exceptions.LogException(exc);

        Console.WriteLine(etc. Mensaje);

        regresar"";

    }

}



staticpublicstring Encrypt(cadena aEncriptarCadena)

{

    Prueba

    {

        Crea un UnicodeEncoder para convertir entre el array de bytes y la cadena.

        UnicodeEncoding ByteConverter = nuevo UnicodeEncoding();



        Crea arrays de bytes para almacenar datos originales, cifrados y descifrados.

        byte[] dataToEncrypt =

            ByteConverter.GetBytes(toEncryptString);

        byte[] encryptedData;

        byte[] descifrado Data;



        Crear una nueva instancia de RSACryptoServiceProvider para generar

        datos de clave pública y privada.

        RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();



        RSA. FromXmlString (llave privada);



        Pasar los datos a ENCRYPT, la información de clave pública

        (usando RSACryptoServiceProvider.ExportParameters(false),

        y una bandera booleana que especifica que no hay relleno OAEP.

        encryptedData = RSAEncrypt(

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



        cadena base64code = Convert.ToBase64String(encryptedData);

        devolver base64code;

    }

    captura (excepciones exc)

    {

        Detecta esta excepción por si el cifrado lo hacía

        no tener éxito.

        Exceptions.LogException(exc);

        Console.WriteLine(etc. Mensaje);

        regresar"";

    }







}



staticprivatebyte[] RSAEncrypt(

    byte[] DataToEncrypt,

    RSAParameters RSAKeyInfo,

    bool DoOAEPPañadiendo)

{

    Prueba

    {

        Crea una nueva instancia de RSACryptoServiceProvider.

        RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();



        Importa la información clave RSA. Esto solo necesita

        para incluir la información de clave pública.

        RSA. ImportParameters(RSAKeyInfo);



        Cifra el array de bytes pasados y especifica el relleno OAEP.  

        El relleno OAEP solo está disponible en Microsoft Windows XP o

        Más tarde.  

        Devuelve RSA. Encrypt(DataToEncrypt, DoOAEPPadding);

    }

    Captura y muestra una CryptographicException  

    A la consola.

    catch (CryptographicException e)

    {

        Excepciones.LogException(e);

        Consola.WriteLine(e.Message);



        returnnull;

    }



}



staticprivatebyte[] RSADecrypt(

    byte[] DataToDecrypt,

    RSAParameters RSAKeyInfo,

    bool DoOAEPPañadiendo)

{

    Prueba

    {

        Crea una nueva instancia de RSACryptoServiceProvider.

        RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();



        Importa la información clave RSA. Esto necesita

        para incluir la información de la clave privada.

        RSA. ImportParameters(RSAKeyInfo);



        Descifra el array de bytes pasados y especifica el relleno OAEP.  

        El relleno OAEP solo está disponible en Microsoft Windows XP o

        Más tarde.  

        Devuelve RSA. Decifrar (DataToDecrypt, DoOAEPPadding);

    }

    Captura y muestra una CryptographicException  

    A la consola.

    catch (CryptographicException e)

    {

        Excepciones.LogException(e);

        Consola.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:Crea tu propio foro personal gratis, puedes ganar dinero construyendo en tu nombre, y puedes hacerlo en tres minutos
Próximo:Uso de onclick y href en la etiqueta A en HTML
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com