Вот не так безопасно эталонной реализации простой строки подключения механизма шифрования/дешифрования.
Прежде всего, кодируйте строку соединения с помощью схемы кодирования Base64.
Unencoded Строка соединения:
server=localhost\SQLEXPRESS2012;database=testdb;uid=testuser;pwd=supersecret
Base64 закодированные Строка соединения:
c2VydmVyPWxvY2FsaG9zdFxTUUxFWFBSRVNTMjAxMjtkYXRhYmFzZT10ZXN0ZGI7dWlkPXRlc3R1c2VyO3B3ZD1zdXBlcnNlY3JldA==
После этого соответствующая строка в файле App.config
должен выглядеть следующим образом.
<add name="TestDb" connectionString="c2VydmVyPWxvY2FsaG9zdFxTUUxFWFBSRVNTMjAxMjtkYXRhYmFzZT10ZXN0ZGI7dWlkPXRlc3R1c2VyO3B3ZD1zdXBlcnNlY3JldA==" providerName="System.Data.SqlClient" />
Наконец, изменить ваш DbContext
, чтобы иметь возможность создавать соединения с базой данных, используя строку кодированного соединения.
using System;
using System.Configuration;
using System.Data.Common;
using System.Data.Entity;
using System.Data.SqlClient;
using System.Text;
namespace TestApp
{
public class TestDb : DbContext
{
public TestDb() : base(CreateConnection("TestDb"), true)
{
}
static DbConnection CreateConnection(string dbName)
{
string encodedCs = ConfigurationManager.ConnectionStrings[dbName].ConnectionString;
string decodedCs = Encoding.UTF8.GetString(Convert.FromBase64String(encodedCs));
return new SqlConnection(decodedCs);
}
}
}
Как вы уже заметили, что эта реализация использует схему кодирования Base64, который может быть легко обращенную конечными пользователями, если они знают, что они делают.
Вставьте строку подключения в файл конфигурации и зашифруйте ее. Если это веб-приложение, его легко шифровать с помощью _aspnet_regiis_ с аргументом _-pe_; не так просто для файлов app.config. В качестве альтернативы вы могли бы запутать свой код, но я считаю, что безопасность безвестности является одним из наименее эффективных методов. –