Olá pessoal, hoje eu vou mostrar como utilizar um framework publicado no NuGet.org chamado CriptConnectionString. Ele é responsável por deixar a sua conexão do banco de dados de forma criptografada dentro do arquivo de configuração. Resolvi compartilhar ele pelo Nuget.org e assim poder ajudar a todos que deseja um pouco mais de segurança junto a sua conexão com o banco de dados.
A sua conexão vai ficar mais ou menos assim dentro do arquivo de configuração: +xsKDWPqQHIB3wWzJ8fqv2e6YJPEF4FDp4bCY+2T9Q5qOTm5FHbB....
Vamos ver o passo a passo de como colocar ela assim.
Passo 1:
Importe o framework dentro do NuGet.org para a sua aplicação. Figura 1.
Figura 1 - Manage NuGet packages
Clique com o botão direito em cima do projeto e escolha a opção manage nuget package.
A figura 2 mostra como buscar pelo framework para instalar.
Figura 2 - Procurando no NuGet
Basta colocar o nome do framework CriptConnectionString que vai encontrar a versão 1.0.1. Clique no botão Install e veja instalado no projeto.
A figura 3 mostra ele instalado no projeto.
Depois de instalado, vamos utilizar o CriptConnectionString.
Dentro do arquivo de configuração App.config por exemplo, coloque a sua conexão decriptografada. Code 1.1.
Code 1.1 - Arquivo de configuração
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="MyConnection" connectionString="Server=myServerAddress;Database=myDataBase;
User Id=myUsername;Password=myPassword;" />
O code 1.1 mostra a conexão e uma chave pública. Essa conexão está aberta e todos podem ver o usuário, senha, base de dados e servidor.
Lembre-se que esse é um aplicativo do tipo console application, então é necessário primeiro criptografar a string e depois usar ela. Aqui eu vou fazer os dois modos para ver que funciona sem problema. O framework tem uma chave pública e privada se quiser, no momento vamos utilizar apenas a chave pública para criptografar.
Dentro da classe principal da console application, vamos ver como ficou o código. Veja o code 1.2.
using System;
namespace UsingCriptConnectionString
{
internal class Program
{
private static void Main(string[] args)
{
var publicKey = System.Configuration.ConfigurationManager.AppSettings["publicKey"].ToString();
var decryptConnection = System.Configuration.ConfigurationManager.ConnectionStrings["MyConnection"].ToString();
//encrypt
Encrypt(publicKey, decryptConnection);
}
private static void Encrypt(string publicKey, string connection)
{
CriptConnectionString.Cripto cripto = new CriptConnectionString.Cripto();
Console.WriteLine(cripto.Encrypt(connection, publicKey, null));
}
}
}
O primeiro passo é pegar a chave pública através do ConfigurationManager, depois pegar a string de conexão do data base e chamar o método Encrypt passando os dados. Dentro do método Encrypt é criado uma instância de CriptConnectionString.Cript() e é chamado o método Encrypt passando a conexão e a chave pública.
Vamos ver o resultado disso na figura 4.
Figura 4 - Resultado da criptografia
Esse valor impresso na figura 4 é o que você deve usar na sua configuração como connection string e no momento de usar a conexão na sua aplicação, basta usar outro método para decriptografar em memória. Ao retirar a criptografia, basta mandar para o drive e tudo vai funcionar, mas o arquivo de configuração vai continuar criptografado e com uma certa segurança.
Passo 2
Vamos utilizar a decriptografia da string de conexão em tempo de execução. Vamos alterar um pouco a console application para usar os dois métodos, para criptografar e decriptografar. Veja o code 1.3.
Code 1.3 - Arquivo de configuração com duas strings.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="MyConnection" connectionString="Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;" />
<add name="MyCriptConnection" connectionString="+xsKDWPqQHIB3wWzJ8fqv2e6YJPEF4FDp4bCY+2T9Q5qOTm5FHbBq1FB...." />
</connectionStrings>
<appSettings>
<add key="publicKey" value="d41d8cd98f00b204e9800998ecf8427e" />
</appSettings>
</configuration>
O code 1.4 mostra chamando os dois métodos, veja como:
Code 1.4 - Encript e Decript no console
using System;
namespace UsingCriptConnectionString
{
internal class Program
{
private static void Main(string[] args)
{
var publicKey = System.Configuration.ConfigurationManager.AppSettings["publicKey"].ToString();
var decryptConnection = System.Configuration.ConfigurationManager.ConnectionStrings["MyConnection"].ToString();
var cryptConnection = System.Configuration.ConfigurationManager.ConnectionStrings["MyCriptConnection"].ToString();
//encrypt
Encrypt(publicKey, decryptConnection);
//decrypt
Decrypt(publicKey, cryptConnection);
}
private static void Encrypt(string publicKey, string connection)
{
CriptConnectionString.Cripto cripto = new CriptConnectionString.Cripto();
Console.WriteLine(cripto.Encrypt(connection, publicKey, null));
}
private static void Decrypt(string publicKey, string cryptConnection)
{
CriptConnectionString.Cripto cripto = new CriptConnectionString.Cripto();
Console.WriteLine(cripto.Decrypt(cryptConnection, publicKey, null));
}
}
}
O code 1.4 faz o encript e o decript da string de conexão e mostra no console, usando a mesma chave pública configurada no arquivo de configuração.
É aconselhável utilizar isso as suas aplicação para manter mais seguro a sua conexão com o banco de dados, só não se esqueça e chamar o método de decript quando for passar os dados para o drive de conexão como o SQL Server.
Figura 5 - Resultado final
Espero que tenha gostado e qualquer dúvida pode entrar em contato pelo meu site https://www.mauriciojunior.net.