Каким способом лучше всего зашифровать connstring в app.config?
- используйте
cryptography
для шифрования и дешифрования или
- используйте
%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -pef "connectionStrings" "C:\documents and settings\bob\projects\myproject"
, как рекомендуется в Защитить файл App.Config или Encrypt .
проблемы:
1) Если я использую Crytography, все работает нормально. За исключением того, что этот код ниже будет вызываться каждый раз, когда вы сталкиваетесь с using (leDataContext db = new leDataContext())
, что заставляет меня чувствовать, что это замедлит работу системы.
public partial class leDataContext
{
public leDataContext()
: base("")
// : base(ConfigurationManager.ConnectionStrings["leConnString"].ToString())
{
string decrypted = Cryptography.Decrypt(ConfigurationManager.ConnectionStrings["leConnString"].ToString());
base.Connection.ConnectionString = decrypted;
}
}
2) Если я использую метод 2, он звучит хорошо, так как автоматически выполняет шифрование. Однако следует ли мне хранить эти зашифрованные <CipherValue>rUmEA8h02uMZ5M4uEVtL+5M/UvPuyJ4UJz5d/P...</CipherValue>
в моем app.conf при публикации с использованием ClickOnce?
Это потому, что метод 2 может быть выполнен только на клиентском компьютере. Поэтому я должен выполнить метод 2 на клиентском компьютере, затем скопировать этот зашифрованный код в файл, и каждый раз, когда я хочу опубликовать, используя clickOnce, а затем скопировать его вручную обратно в файл App.config перед публикацией, чтобы клиент обновил права connstring
Криптографический код:
internal static string Encrypt(string sender, string key)
{
string text1;
if (sender == null) sender = "";
byte[] buffer4 = new byte[0];
byte[] buffer1 = buffer4;
byte[] buffer2 = new byte[] { 110, 120, 130, 140, 150, 160, 170, 180 };
try
{
buffer1 = Encoding.UTF8.GetBytes(key.Substring(0, 8));
DESCryptoServiceProvider provider1 = new DESCryptoServiceProvider();
byte[] buffer3 = Encoding.UTF8.GetBytes(sender);
MemoryStream stream1 = new MemoryStream();
CryptoStream stream2 = new CryptoStream(stream1, provider1.CreateEncryptor(buffer1, buffer2), CryptoStreamMode.Write);
stream2.Write(buffer3, 0, buffer3.Length);
stream2.FlushFinalBlock();
text1 = Convert.ToBase64String(stream1.ToArray());
}
catch (Exception ex)
{
text1 = string.Empty;
}
return text1;
}
Не могли бы вы посоветовать?