Před časem jsem zde psal o šifrování connectionStringu pomocí aspnet_regiis.exe. Nyní jsem nabyl dojmu, že budu muset použít šifrování programové, tak jsem si ho vyzkoušel.

Vzhledem k tomu, že mám vytvořený příklad na úpravu souboru web.config, rozhodl jsem se doplnit ho o dvě tlačítka. Jedno pro zašifrování a druhé pro dešifrování sekce connectionStrings. Potřebný kód je ještě jednodušší než u zmíněné úpravy sekce v web.config.

U každého tlačítka jsem použil jiný způsob načtení sekce connectionStrings. To jen aby bylo zjevné, že lze použít jakoukoliv z možností.

C#:
//Tlačítko Šifrovat
protected void Button3_Click(object sender, EventArgs e)
{
    Configuration cfg = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
    ConnectionStringsSection connSection = cfg.ConnectionStrings;
    if (!connSection.SectionInformation.IsProtected)
    {
        connSection.SectionInformation.ProtectSection("RsaProtectedConfigurationProvider");
        cfg.Save();
    }
}

//Tlačítko Dešifrovat
protected void Button4_Click(object sender, EventArgs e)
{
    Configuration cfg = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
    ConfigurationSection section = cfg.GetSection("connectionStrings");
    if (section.SectionInformation.IsProtected)
    {
        section.SectionInformation.UnprotectSection();
        cfg.Save();
    }
}

Samotné šifrování a dešifrování zajišťují metody ProtectSection() a UnprotectSection(). Metodě pro šifrování je potřeba předat jako parametr kontejner s šifrovacím klíčem.

Příjemně mě překvapila skutečnost, že sekci connectionStrings není potřeba dešifrovat, aby do ní šly přidávat další connectionStringy. Z tohoto důvodu vlastně programové šifrování ani nepotřebuji.

Šifrování bezproblémově funguje i v případě, že je sekce connectionStrings uložena mimo soubor web.config, ve vlastním konfiguračním souboru. Toho lze dosáhnout vytvořením nového .config souboru (třeba ConnectionStrings.config) s jednoduchým obsahem:

<?xml version="1.0"?>

<connectionStrings>
</connectionStrings>

Upravíme také soubor web.config:

<connectionStrings configSource="ConnectionStrings.config"></connectionStrings>

Všechny connectionStringy se teď budou ukládat do souboru ConnectionStrings.config.