lunes, 6 de abril de 2009

Creación de llaves públicas y privadas del algoritmo asimétrico RSA como archivos XML en C#

En esta entrada les mostraré la forma en que podemos generar nuestras propias llaves tanto públicas y privadas del algoritmo de encriptación asimétrico RSA (llamado así por sus creadores), las llaves son generadas como archivos XML, esto con la finalidad de poder distribuir la llave pública para los fines que sean necesarios y el ejemplo está hecho en C# para aplicaciones de escritorio. El ejemplo esta hecho en VS 2008 express edition.

Si todo esto de la encriptación y las llaves públicas y privadas se te dificulta un poco, te recomiendo que consultes esta información.

Todo el proceso es realmente sencillo y se hace con el namespace System.Security.Cryptography.

Para este ejemplo y para ilustrar el contenido que tendrán los archivos, se tienen 2 cuadros de texto, en el primero se tiene el contenido de la llave privada (y pública tambien), mientras que en el segundo se tiene únicamente el contenido de la llave pública.

Tambien se tienen 3 botones, con un botón se generan las llaves y con otros botones se exporta el contenido de los cuadros de texto a archivos XML.

 En el evento Load del formulario tenemos la siguiente instrucción:
algoritmoRSA = new System.Security.Cryptography.RSACryptoServiceProvider(2048);
la variable algoritmoRSA fue previamente declarada.

En el evento clic del boton generar tenemos lo siguiente:
textBox1.Text = algoritmoRSA.ToXmlString(true);
textBox2.Text = algoritmoRSA.ToXmlString(false);
El sistema provee la funcionalidad necesaria para poder obtener las llaves mediante el método ToXmlString(bool indicador); el valor que acepta este método lo utlizamos para indicar si es la llave privada (con true) o si es la llave pública (con false).

En los botones que nos permiten exportar el contenido de los cuadros de texto tenemos un código como este:
SaveFileDialog sfd = new SaveFileDialog();
            sfd.Filter = "archivos xml |*.xml";
            if (sfd.ShowDialog() == DialogResult.OK)
            {
                System.IO.StreamWriter sw = new System.IO.StreamWriter(sfd.FileName);
                sw.Write(this.textBox1.Text);
                sw.Close();
                  
            }
esto nos permite guardar los archivos xml.

 

1 comentario:

  1. Hola!
    Te queria preguntar como podria recoger la clave privada de un certificado que ya eh creado y que tengo en codigo en un objeto de tipo x509Certicate2.

    El problema es que no consigo coger la clave privada de ningun modo... necesito un string en base64 para realizar la firma de un documento.

    Muchas gracias por anticipado!

    Elena

    ResponderEliminar