Categorías destacadas
programacion php    
Artículo
2
¡votar!

 Trabajar con Certificados Digitales en .NET (II)

Introducción:

En el artículo anterior vimos una introducción al trabajo con certificados digitales, explicando las clases que podemos utilizar dentro de .NET.


En esta ocasión vamos a entrar a ver algunos ejemplos de utilización de dichas clases:
En primer lugar vamos a crear un nuevo proyecto en Visual Studio, y tal y como comentaba en el artículo anterior, y vamos a agregar la referencia a System.Security:

http://img24.imageshack.us/img24/9160/referenciac.png

El primer ejemplo va a consistir en la obtención de los certificados digitales instalados en el ordenador:
public class CertificateInfo
{
public static List GetCertificatesList(X509Store store)
{
List certificates = new List();
if (store == null)
return null;
store.Open(OpenFlags.ReadOnly);
certificates.AddRange(store.Certificates.Cast().ToList());
store.Close();
return certificates;
}
public static X509Store CreateX509Store()
{
return new X509Store();
}
}

El método GetCertificateList, va a abrir el almacén que recibe por parámetro, y va a obtener el conjunto de certificados, para que podamos utilizarlos.
¿Cómo encriptar y desenciptar valores con un certificado?
Para encriptar una cadena de texto vamos a necesitar un objeto de tipo RSACyptoServiceProvider. A continuación he creado un método que va a recibir como parámetros el certificado que vamos a utilizar y el dato a encriptar.


public static string Encrypt(X509Certificate2 cert, string dataToEncrypt)
{
if (cert == null)
throw new ArgumentNullException("cert");
if (string.IsNullOrWhiteSpace(dataToEncrypt))
throw new ArgumentNullException("dataToEncrypt");
RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)cert.PublicKey.Key;
byte[] bytestoEncrypt = ASCIIEncoding.ASCII.GetBytes(dataToEncrypt);
byte[] encryptedData = rsa.Encrypt(bytestoEncrypt, false);
return Convert.ToBase64String(encryptedData);
}

Para realizar el proceso inverso, tenemos el siguiente fragmento de ejemplo:
public static string Decrypt(X509Certificate2 cert, string dataToDecrypt)
{
if (cert == null)
throw new ArgumentNullException("cert");
if (string.IsNullOrWhiteSpace(dataToDecrypt))
throw new ArgumentNullException("dataToDecrypt");
if (cert.PrivateKey == null)
throw new Exception("El certificado no tiene clave privada.");
RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)cert.PrivateKey;
byte[] bytestoEncrypt = Convert.FromBase64String(dataToDecrypt);
byte[] encryptedBytes = rsa.Decrypt(bytestoEncrypt, false);
return new System.Text.UTF8Encoding().GetString(encryptedBytes);
}


Como utilizar dichos métodos:

var encriptado = CertificateInfo.Encrypt(cert, "Hola que tal");
var desencriptado = CertificateInfo.Decrypt(cert, encriptado);


Espero que os sea de utilidad.
Podéis ver algún ejemplo mas en mi blog.

Saludos
   
Publicado por:
Javier Torrecilla
Recomendar
a un amigo
Compartir
en redes
 
Comentarios
 
BBDD
Entornos de desarrollo
Entretenimiento
Herramientas
Internet
Lenguajes de script
Lenguajes imperativos
Lenguajes orientados a objeto
Otros lenguajes
Plataformas
Teoría
Varios
Copyright © 1998-2011 Programación en Castellano. Todos los derechos reservados
Datos legales | Politica de privacidad | Contacte con nosotros | Publicidad

Diseño web y desarrollo web. Un proyecto de los hermanos Carrero.

Red internet:
Juegos gratis | Servidores dedicados
Más internet: Password | Directorio de weblogs | Favicon