Como encriptar o desencriptar utilizando TripleDes y X.509

tema enviado por Starcondor en C#
tema iniciado el 26/03/2008

Quisiera saber si alguien sabe como utilizar elementos de encriptacion y desencriptacion, dirigido a archivos utilizando TripleDES, con certificados X.509.

Por el momento cree una clase utilitaria para el TripleDES, sin embargo no se como deban utilizarse los certificados X.509 en combinacion al TripleDES. Dejo el codigo de TripleDES, si alguien me puede orientar y/o solucionar mi problema.

public class CCryptoUtil {

  private const string ConfigSep = "]/2$15";

  private static byte[] Key;

  private static byte[] IV;

  public static void SetKeys(string ConfigElement) {

    string[] Elements = ConfigElement.Split(

          new string[] { ConfigSep }, StringSplitOptions.None);

    Key = Convert.FromBase64String(Elements[0]);

    IV = Convert.FromBase64String(Elements[1]);

  }

  public static string DecryptTextFromFile(String FileName) {

    string sRet = string.Empty;

    try

    {

      FileStream fStream = File.Open(FileName, FileMode.OpenOrCreate);

      CryptoStream cStream = new CryptoStream(fStream,

            new TripleDESCryptoServiceProvider().CreateDecryptor(Key, IV),

            CryptoStreamMode.Read);

      StreamReader sReader = new StreamReader(cStream);

      sReader.Close();

      cStream.Close();

      fStream.Close();

    }

    catch (CryptographicException e) {

      throw new Exception(string.Format("A Cryptographic error occurred: {0}", e.Message));

    }

    catch (UnauthorizedAccessException e) {

      throw new Exception(string.Format("A file access error occurred: {0}", e.Message));

    }

    return sRet;

  }

  public static void EncryptTextToFile(String Data, String FileName) {

    try

    {

      FileStream fStream = File.Open(FileName, FileMode.Create);

      CryptoStream cStream = new CryptoStream(fStream,

            new TripleDESCryptoServiceProvider().CreateEncryptor(Key, IV),

            CryptoStreamMode.Write);

      StreamWriter sWriter = new StreamWriter(cStream);

      sWriter.WriteLine(Data);

      sWriter.Close();

      cStream.Close();

      fStream.Close();

    }

    catch (CryptographicException e) {

      throw new Exception(string.Format("A Cryptographic error occurred: {0}", e.Message));

    }

    catch (UnauthorizedAccessException e) {

      throw new Exception(string.Format("A file access error occurred: {0}", e.Message));

    }

  }

}