我在加密app.config中的連接字符串時遇到問題。我有保護app.config的connectionStrings部分的代碼,但密碼仍以純文本顯示。在app.config中加密連接字符串
我需要加密連接字符串,因此它在部署時不是純文本。我在web.config上看到類似的問題,但不是app.config。
我在加密app.config中的連接字符串時遇到問題。我有保護app.config的connectionStrings部分的代碼,但密碼仍以純文本顯示。在app.config中加密連接字符串
我需要加密連接字符串,因此它在部署時不是純文本。我在web.config上看到類似的問題,但不是app.config。
看看This Article它有一些非常有用的例子。你基本上在尋找System.Configuration.SectionInformation.ProtectSection
來幫助你。
這種方法可用於DataSet和TableAdapters嗎?他們選擇存儲在你的app.config中的ConnectingStrings ..如果它的Encrypted將會自動解密? – 2012-10-07 10:54:30
偷看你可以使用Rijndael算法,在System.Security.Cryptography.Rijndael
類中實現。這是非常強大的加密模式,根據特定的密碼將字節轉換爲其他字節。
看看this example。
你如何保護密碼? – Dan 2013-12-19 19:37:58
您可以輕鬆應用與web.config相同的解決方案,只需將app.config重命名爲web.config,使用aspnet_regiis工具進行加密,然後將其重命名爲app.config。
%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -pef "connectionStrings" c:\<folder containing your web.config>
(停止在文件夾含量,並且不把結尾的 「\」)你可以在記事本中打開它來查看加密文件。在視覺工作室你會看到它被解密。您可以像使用未加密的方式一樣使用連接字符串。
該代碼對Model First有用。 1 - 創建一個這樣的類。 (AADOEEntities1是實體模型)
class DataContext
{
public static AADOEEntities1 Context;
}
2 - 把這個代碼在Program.cs中
using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Data.Common;
using System.Data;
using System.Data.SqlClient;
using System.Data.EntityClient;
using System.Data.Metadata.Edm;
using System.IO;
namespace a
{
string providerName = "System.Data.SqlClient";
string serverName = ".";
string databaseName = "AADOE";
// Initialize the connection string builder for the
// underlying provider.
SqlConnectionStringBuilder sqlBuilder =
new SqlConnectionStringBuilder();
// Set the properties for the data source.
sqlBuilder.DataSource = serverName;
sqlBuilder.InitialCatalog = databaseName;
sqlBuilder.IntegratedSecurity = true;
sqlBuilder.UserID = "sa";
sqlBuilder.Password = "123456";
// Build the SqlConnection connection string.
string providerString = sqlBuilder.ToString();
// Initialize the EntityConnectionStringBuilder.
EntityConnectionStringBuilder entityBuilder =
new EntityConnectionStringBuilder();
//Set the provider name.
entityBuilder.Provider = providerName;
// Set the provider-specific connection string.
entityBuilder.ProviderConnectionString = providerString;
// Set the Metadata location.
entityBuilder.Metadata = @"res://*/mdlAADOE.csdl|
res://*/mdlAADOE.ssdl|
res://*/mdlAADOE.msl";
EntityConnection conn =
new EntityConnection(entityBuilder.ToString());
DataContext.Context = new AADOEEntities1(conn);
Application.Run(new frmLogin());
}
3 - 設置的ConnectionString = 「」 中的app.config。
這看起來很糟糕的解決方法。例如,你可以使用反射器或類似的從二進制獲得源代碼 - >你會看到憑據 – zozzancs 2018-01-09 08:54:36
如果要加密connectionStrings
config.ConnectionStrings.SectionInformation.ProtectSection(Nothing);
如果要加密AppSettings
這樣的定義config
文件
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
的位置
config.AppSettings.SectionInformation.ProtectSection(Nothing);
這可以工作,但在我的情況下,我不得不將「Nothing」替換爲「DataProtectionConfigurationProvider」 – 2017-09-27 20:53:20
請記住,如果你使用ProtectSection()和加密您的ConnectionString,我簡直可以複製你的加密config文件,用我的應用程序中使用它,並調用UnprotectSection()。這會以純文本的形式讓我回到原始連接字符串。 – 2017-12-22 14:50:47