0
Vote

Password encriptada en el archivo de configuracion de Circo

description

A nivel de Framework Circo se debe manejar la posibilidad de tener una password encriptada en el acceso a la base de datos

Para ellos se agregara al archivo CircoApp.Config la existencia de un nuevo tag "pPasswordEncriptada", dento del area
"configuration/appSettings",
 
/// <summary>
/// Primero busca el valor en el archivo de configuracion con el tag : pPasswordEncriptada (true o false)
/// si no lo encuentra retorna el valor de la propiedad publica PasswordEncrypted(por defecto false)
/// </summary>
/// <returns></returns>
public static bool DBPassworIsdEncrypted()
{
try
{
string pPasswordEncriptada =
ConfigurationManagerExtended.GetAttributeByKey("configuration/appSettings", "pPasswordEncriptada", "value");
return Convert.ToBoolean(pPasswordEncriptada);
 
}
catch
{
return _passwordEncrypted;
}

}

El metodo por defecto paras creacion de un Entorno de UNICA BASE DE DATOS que es el estandard de Circo
para la mayoria de las aplicaciones es Env.Create
Este es el metodo preferido llamado por el creador del entorno de Circo y se lo ha trabajado inrternamente como para que presentando la misma firma que los sprints previos al 8 trabaje tomando los datos de usuario y passwsword del archivo de configuracion y llame  a la sobrecarga de Create que necesita los datos de la cadena de coneccion como parametros
 
public static void Create()
{
string defaultDB = ConfigurationManagerExtended.GetDefaultDatabase();
string conStr = ConfigurationManagerExtended.GetConnectionString(defaultDB);
string server = ConfigurationManagerExtended.GetConnectionStringDataSource(conStr);
string userId = ConfigurationManagerExtended.GetConnectionStringUser(conStr);
string db = ConfigurationManagerExtended.GetConnectionStringInitialCatalog(conStr);
string password = ConfigurationManagerExtended.GetConnectionStringPassword(conStr);
Create(db, server, userId, password, Circo.Framework.Persistencia.Connection.Conn.DbProvider.SqlClient);
}

 

En particular ConfigurationManagerExtended.GetConnectionStringPassword(conStr); se encarga de desencritar la password si la misma ha sido encriptada
 
public static string GetConnectionStringPassword(string connectionString)
{
int i = SearchString(connectionString.Split(';'), "Password");
string password = connectionString.Split(';')[i];
  if (DBPassworIsdEncrypted())
  {
    return KeyGenerator.XORSimpleEncryptorDecryptor(password.Split('=')[1], kCircoMagicWord);
  }
 else
  {
   return password.Split('=')[1]; }
  }
}

comments