PDA

View Full Version : سوال: مشکل در encrypt و decrypt کردن connectionstring



Miss_samira
شنبه 19 اسفند 1391, 11:40 صبح
سلام دوستان، من برای جلوگیری از دسترسی به اطلاعات user و pass دیتابیس موجود در فایل app.config قصد دارم در زمان نصب برنامه این فایل را encrypt کنم. در ظاهر امر بدون هیچ خطایی این اتفاق میفته اما زمانیکه بعد از نصب، در مسیر نصب app.config را بررسی میکنم کماکان اطلاعات رمز نشده است :-؟؟

قابل توجه اینکه من در همون مراحل نصب، اطلاعات دیتابیس مثل نام سرور و userو pass رو از کاربر دریافت میکنم، و بعد از دخیره سازی آن میخوام که encrypt شه.


کدی که در کلاس installer.cs دارم :


protected override void OnAfterInstall(IDictionary savedState)
{
base.OnAfterInstall(savedState);
string dataSource = Context.Parameters["DataSource"];
dataSource = dataSource.Replace('/', ';');
MessageBox.Show("instance=" + dataSource);
dataSource = dataSource.Replace("$", @"\");
dataSource = dataSource.Replace("UserID", @"User ID");
dataSource = dataSource.Replace(@"\\", @"\");
dataSource = "Data source = " + dataSource.Replace("InitialCatalog",
@"Initial Catalog");
string pwd = Context.Parameters["Password"];
ExeConfigurationFileMap map = new ExeConfigurationFileMap();
string configFile = string.Concat(Assembly.GetExecutingAssembly().Loca tion,
".config");
map.ExeConfigFilename = configFile;
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(ma p, System.Configuration.ConfigurationUserLevel.None);
ConnectionStringSettings connectionstring = new ConnectionStringSettings("insuranceConnectionString", dataSource);
config.ConnectionStrings.ConnectionStrings.Add(con nectionstring);
config.Save(ConfigurationSaveMode.Modified, true);
ConfigurationManager.RefreshSection("insuranceConnectionStrings");
Properties.Settings.Default.Reload();
cryptography.ProtectConnectionString();
}


کد موجود در کلاس cryptography.cs



public static void ProtectConnectionString()
{
ToggleConnectionStringProtection(Application.Execu tablePath, true);
}

public static void UnprotectConnectionString()
{
ToggleConnectionStringProtection(Application.Execu tablePath, false);
}

private static void ToggleConnectionStringProtection(string pathName, bool protect)
{
string strProvider = "DataProtectionConfigurationProvider";
Configuration oConfiguration = null;
ConnectionStringsSection oSection = null;

try
{
oConfiguration = ConfigurationManager.OpenExeConfiguration(pathName );
if (oConfiguration != null)
{
bool blnChanged = false;
oSection = oConfiguration.GetSection("connectionStrings") as ConnectionStringsSection;
if (oSection != null)
{
if ((!(oSection.ElementInformation.IsLocked)) &&
(!(oSection.SectionInformation.IsLocked)))
{
if (protect)
{
if (!(oSection.SectionInformation.IsProtected))
{
blnChanged = true;
oSection.SectionInformation.ProtectSection(strProv ider);
}
}
else
{
if (oSection.SectionInformation.IsProtected)
{
blnChanged = true;
oSection.SectionInformation.UnprotectSection();
}
}
}
if (blnChanged)
{
oSection.SectionInformation.ForceSave = true;
oConfiguration.Save();
}
}
}
}
catch (System.Exception ex)
{ throw (ex); }
}


ممنون از راهنمایی تون.

Miss_samira
شنبه 19 اسفند 1391, 19:21 عصر
یعنی یکی پیدا نمیشه به من کمک کنه :ناراحت:

code_project
سه شنبه 22 اسفند 1391, 21:45 عصر
به نتیجه رسیدی منم خبر کن تو را خدااااااااااااااااااااااا ااا

Miss_samira
چهارشنبه 23 اسفند 1391, 00:42 صبح
متأ سفانه مثه اینکه کسی نیست یه یاری برسونه. تو stakoverflow هم مطرح کردم ولی اونجام هنوز کسی پاسخی نداده.
نمیدونم کسی از این مهندسین تو برنامه هاش این موضو واسش مهم نبوده عایا!! حالا چه با این روش چه با روش دیگه
"به هر حال من این رو از بین راههایی که تو سرچام بدست آوردم ترجیح دادم". تقریبا چند روزی حسابی با کدا کلنجار رفتم اما متاسفنه نتونستم به نتیجه برسم واسه همین اومدم تو انجمنا درخواست کمک کنم اما مثه اینکه خبری نیس.
به هر حال اگه هر کسی به نتیجه رسید چه شما چه من چه دیگری ثواب داره، بازم جلو جلو ممنون.