/// <summary> /// Método encargado de verificar si el texto encriptado y el texto enviado son iguales. /// </summary> /// <param name="_encryptedInput">Texto encriptado que será verificado</param> /// <param name="_input">Texto que será utilizado para comparar con el texto encriptado</param> /// <returns></returns> public static bool VerifyEncryptedInput(string _encryptedInput, string _input) { try { if (string.IsNullOrEmpty(_encryptedInput) == true || string.IsNullOrWhiteSpace(_encryptedInput) == true) { throw new ArgumentNullException("Error, texto encriptado no válido."); } if (string.IsNullOrEmpty(_input) == true || string.IsNullOrWhiteSpace(_input) == true) { throw new ArgumentNullException("Error, texto ingresado no válido."); } var byteEncryptedInput = Convert.FromBase64String(_encryptedInput); var salt = new byte[DataEncryption.SALT_BYTES]; Array.Copy(byteEncryptedInput, 0, salt, 0, DataEncryption.SALT_BYTES); var encryptedInputArray = DataEncryption.InputHashing(_input, salt); var inputArray = new byte[DataEncryption.SALT_BYTES + DataEncryption.HASH_BYTES]; Array.Copy(salt, 0, inputArray, 0, DataEncryption.SALT_BYTES); Array.Copy(encryptedInputArray, 0, inputArray, DataEncryption.SALT_BYTES, DataEncryption.HASH_BYTES); //TODO: se podría usar SlowEquals var check = byteEncryptedInput.SequenceEqual(inputArray); return(check); } catch (Exception e) { throw new Exception("Error al intentar verificar en texto ingresado con el texto encriptado", e); } }
private const int HASH_BYTES = 18; //tamaño del array hash #endregion /// <summary> /// Método encargado de encriptar un INPUT ingresado por usuario. /// Se el incluye la SALT para aumentar la complejidad. /// </summary> /// <param name="_input">Valor que será encriptado</param> /// <exception cref="ArgumentNullException">Se genera en caso de enviar un texto no válido (null o vacío)</exception> /// <exception cref="Exception.Exception(string, Exception)">Se genera en caso de fallar la ejecución del método</exception> /// <returns></returns> public static string EncryptInput(string _input) { try { if (string.IsNullOrEmpty(_input) == true || string.IsNullOrWhiteSpace(_input) == true) { throw new ArgumentNullException("Error, texto enviado no válido."); } var encryptedInput = new byte[DataEncryption.SALT_BYTES + DataEncryption.HASH_BYTES]; byte[] salt = DataEncryption.SaltGenerator(); byte[] hash = DataEncryption.InputHashing(_input, salt); Array.Copy(salt, 0, encryptedInput, 0, DataEncryption.SALT_BYTES); Array.Copy(hash, 0, encryptedInput, DataEncryption.SALT_BYTES, DataEncryption.HASH_BYTES); var encryptedString = Convert.ToBase64String(encryptedInput); return(encryptedString); } catch (Exception e) { throw new Exception("Error al intentar encriptar y codificar el texto enviado por parámetro.", e); } }