public string Encriptar(Valor llave, Valor palabra, EnumAlgoritmo algoritmo)
        {
            byte[] keyArray;
            byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(palabra.ToString());

            keyArray = UTF8Encoding.UTF8.GetBytes(llave.ToString());

            byte[] resultArray;
            try
            {
                using (SymmetricAlgorithm symmetricAlgorithm = ProveedorAlgoritmo(algoritmo))
                {
                    symmetricAlgorithm.Key = keyArray;
                    symmetricAlgorithm.IV = IV(algoritmo);
                    symmetricAlgorithm.Padding = PaddingMode.Zeros;

                    ICryptoTransform cTransform = symmetricAlgorithm.CreateEncryptor();
                    resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            return Convert.ToBase64String(resultArray, 0, resultArray.Length);
        }
 private byte[] IV(EnumAlgoritmo algoritmo)
 {
     switch (algoritmo)
     {
         case EnumAlgoritmo.DES:
             return IV_DES;
         case EnumAlgoritmo.TDES:
             return IV_DES;
         case EnumAlgoritmo.Rijndael:
             return IV_Rijndael;
         default:
             throw new Exception("Error: Algoritmo - ProveedorAlgoritmo");
     }
 }
        public CriptografiaCampo(Mensaje mensaje, CRIPTOGRAFIA_CAMPO criptografiaCampo)
        {
            this.llave1 = Llave.ValorLlave(mensaje, criptografiaCampo.CRC_LLAVE_1
                , criptografiaCampo.CAMPO_LLAVE_1, criptografiaCampo.CRC_TIPO_LLAVE_1);

            this.segundaLlave = criptografiaCampo.CRC_SEGUNDA_LLAVE;

            if (segundaLlave)
            {
                this.llave2 = Llave.ValorLlave(mensaje, criptografiaCampo.CRC_LLAVE_2
                    , criptografiaCampo.CAMPO_LLAVE_2, criptografiaCampo.CRC_TIPO_LLAVE_2.Value);
                this.operacionLlave = (EnumOperacionLlave)Enum.ToObject(typeof(EnumOperacionLlave), criptografiaCampo.CRC_OPERACION_LLAVE);
            }
            this.algoritmo = (EnumAlgoritmo)Enum.ToObject(typeof(EnumAlgoritmo), criptografiaCampo.CRC_ALGORITMO);
        }
 private SymmetricAlgorithm ProveedorAlgoritmo(EnumAlgoritmo algoritmo)
 {
     switch (algoritmo)
     {
         case EnumAlgoritmo.DES:
             return SymmetricAlgorithm.Create("DES");
         case EnumAlgoritmo.TDES:
             return SymmetricAlgorithm.Create("TripleDES");
         case EnumAlgoritmo.Rijndael:
             return SymmetricAlgorithm.Create("Rijndael");
         default:
             throw new Exception("Error: Algoritmo - ProveedorAlgoritmo");
     }
 }