Artículo
|
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:

El primer ejemplo va a consistir en la obtención de los certificados digitales instalados en el ordenador:
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.
Para realizar el proceso inverso, tenemos el siguiente fragmento de ejemplo:
Como utilizar dichos métodos:
Espero que os sea de utilidad.
Podéis ver algún ejemplo mas en mi blog.
Saludos
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:

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 |
|
|
Comentarios
Últimas noticias
Últimos artículos














































