/// <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); } }
/// <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); } }