/// <summary>
        /// Crea una instancia de <see cref="SecureFileIdentity"/> a partir del archivo especificado.
        /// </summary>
        /// <param name="path">Ruta del archivo con la información cifrada.</param>
        /// <returns>Instancia de <see cref="SecureFileIdentity"/> con la información a partir del archivo.</returns>
        public static SecureFileIdentity FromFile(string path)
        {
            try
            {
                if (!File.Exists(path))
                {
                    throw new FileNotFoundException();
                }

                using (FileStream reader = new FileStream(path, FileMode.Open))
                {
                    BinaryFormatter deserializer = new BinaryFormatter();
                    List <KeyValuePair <string, object> > result = (List <KeyValuePair <string, object> >)deserializer.Deserialize(reader);
                    byte[]   entropy   = (byte[])result.Find(m => m.Key == Keys.Entropy).Value;
                    Encoding encoding  = Encoding.GetEncoding((int)result.Find(m => m.Key == Keys.Encoding).Value);
                    string   apiKey    = (string)result.Find(m => m.Key == Keys.ApiKey).Value;
                    string   apiSecret = (string)result.Find(m => m.Key == Keys.ApiSecret).Value;

                    SecureFileIdentity secureFileIdentity = new SecureFileIdentity(entropy, encoding)
                    {
                        ApiKey    = CryptoHelper.UnprotectString(apiKey, entropy),
                        ApiSecret = CryptoHelper.UnprotectString(apiSecret, entropy)
                    };

                    return(secureFileIdentity);
                }
            }
            catch (Exception exception)
            {
                throw new IdentityException(exception);
            }
        }
Example #2
0
        /// <summary>
        /// Intenta descifrar los datos y devuelve una cadena que contiene los datos descifrados o <paramref name="text"/> si los datos no se pueden descifrar.
        /// </summary>
        /// <param name="text">Texto que se intenta descrifrar.</param>
        /// <param name="entropy">Una matriz de bytes adicional (opcional) que se utilizó para encriptar los datos, o  <see langword="null" /> si no se ha utilizado la matriz de bytes adicional.</param>
        /// <returns>Una cadena que contiene los datos descifrados o <paramref name="text"/> si los datos no se pueden descifrar.</returns>
        public static string TryDecrypt(this string text, byte[] entropy = null)
        {
            if (string.IsNullOrWhiteSpace(text))
            {
                return(text);
            }

            try
            {
                return(CryptoHelper.UnprotectString(text, entropy));
            }
            catch (SystemException)
            {
                // FormatException, CryptographicException //
                return(text);
            }
        }