使用 cmd 加密 App.Config 自定义元素
Encrypt App.Config Custom Element using cmd
我可以使用 aspnet_regiis.exe
命令配置连接字符串加密。现在我已经创建了配置部分,在其中添加了自定义配置元素集合,这将存储连接信息的值。
namespace ExpressSnapSortCreation
{
/// <summary>
/// This Class hold the the Collection of Cofigration key
/// </summary>
internal class ServerReplicationsCollection : ConfigurationElementCollection
{
/// <summary>
/// This Will return the ConfigurationElement
/// </summary>
/// <returns>ConfigurationElement</returns>
protected override ConfigurationElement CreateNewElement()
{
return new ServerReplicationsElement();
}
/// <summary>
/// Get Element BY key
/// </summary>
/// <param name="element"></param>
/// <returns></returns>
protected override object GetElementKey(ConfigurationElement element)
{
return ((ServerReplicationsElement)element).Name;
}
/// <summary>
/// This is override on the Elements
/// </summary>
public class ServerReplicationsElement : ConfigurationElement
{
/// <summary>
/// Name of the Element
/// </summary>
[ConfigurationProperty("name", IsRequired = true)]
public string Name
{
get { return (string)this["name"]; }
set { this["name"] = value; }
}
/// <summary>
/// Data base name
/// </summary>
[ConfigurationProperty("connectionString", IsRequired = true)]
public string ConnectionString
{
get { return (string)this["connectionString"]; }
set { this["connectionString"] = value; }
}
/// <summary>
/// Data base user name
/// </summary>
[ConfigurationProperty("providerName", IsRequired = true)]
public string ProviderName
{
get { return (string)this["providerName"]; }
set { this["providerName"] = value; }
}
/// <summary>
/// Display Order
/// </summary>
[ConfigurationProperty("order", IsRequired = false)]
public int Order
{
get { return (int)this["order"]; }
set { this["order"] = value; }
}
}
}
}
这是分区创建的代码
class ServerReplications : ConfigurationSection
{
/// <summary>
/// The name of this section in the app.config.
/// </summary>
public const string SectionName = "ReplicationConfigurationSection";
/// <summary>
/// Replication data base name
/// </summary>
private const string ReplicationCenterCollectionName = "ReplicationDataBases";
[ConfigurationProperty(ReplicationCenterCollectionName)]
[ConfigurationCollection(typeof(ServerReplicationsCollection), AddItemName = "add")]
public ServerReplicationsCollection ReplicationDataBases { get { return (ServerReplicationsCollection)base[ReplicationCenterCollectionName]; } }
}
这是我的应用程序配置文件。
<?xml version="1.0"?>
<configuration>
<configSections>
<section name="ReplicationConfigurationSection"
type="ExpressSnapSortCreation.ServerReplications, ExpressSnapSortCreation" />
</configSections>
<ReplicationConfigurationSection>
<ReplicationDataBases>
<add name="ApplicationServices" connectionString="Data Source=PC-002\SQLEXPRESS2014;Initial Catalog=AML25;Persist Security Info=True;User ID=sa;Password=StItS!@#SeRvErPC-003" providerName="System.Data.SqlClient" order="1" />
<add name="ApplicationServices2" connectionString="Data Source=PC-004\SQLEXPRESS2014;Initial Catalog=AML26;Persist Security Info=True;User ID=sa;Password=StItS!@#SeRvErPC-002" providerName="System.Data.SqlClient" order="2" />
</ReplicationDataBases>
</ReplicationConfigurationSection>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/>
</startup>
</configuration>
在应用程序中,我们正在获取连接字符串的值。出于安全目的,我们无法显示 App.config 值中的数据。那么需要加密下面的Section
这是我使用的第一个命令
aspnet_regiis.exe -pef "ReplicationConfigurationSection" "C:\Users\mukesh.singh\Documents\Visual Studio 2015\Projects\AML\ExpressSnapSortCreation"
出错 将文件名 "app.config" 转换为 "Web.config"
An error occurred creating the configuration section handler
for ReplicationConfigurationSection: Could not load file or assembly
'ExpressSnapSortCreation' or one of its dependencies. The system
cannot find the file specified.
(C:\Users\mukesh.singh\Documents\Visual Studio
2015\Projects\AML\ExpressSnapSortCreation\bin\Debug\web.config line 4)
Could not load file or assembly 'ExpressSnapSortCreation' or one of
its dependencies. The system cannot find the file specified. Failed!
- 修改后
Could not load type 'ExpressSnapSortCreation.ServerReplications' from
assembly 'System.Web, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a'.
我也试过这个组合
aspnet_regiis.exe -pef "ExpressSnapSortCreation.ServerReplications/ExpressSnapSortCreations" "C:\Users\mukesh.singh\Documents\Visual Studio 2015\Projects\AML\ExpressSnapSortCreation
这是我用来加密 app.config 上自定义部分的代码。我只是打开 Bin 文件夹中的 app.config 文件,它已加密
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
ConfigurationSection section = config.GetSection("ReplicationConfigurationSection");
if (section != null)
{
if (!section.IsReadOnly())
{
if (!section.SectionInformation.IsProtected)
{
if (!section.ElementInformation.IsLocked)
{
section.SectionInformation.ProtectSection("RsaProtectedConfigurationProvider");
section.SectionInformation.ForceSave = true;
config.Save(ConfigurationSaveMode.Full);
Console.WriteLine("Section {0} is now protected by {1}",
section.SectionInformation.Name.ToString(),
section.SectionInformation.ProtectionProvider.Name.ToString());
}
}
}
}
当我打开配置文件时,它看起来像这样
<configuration>
<configSections>
<section name="ReplicationConfigurationSection" type="ExpressSnapSortCreation.ServerReplications, ExpressSnapSortCreation" allowLocation="true" allowDefinition="Everywhere" allowExeDefinition="MachineToApplication" overrideModeDefault="Allow" restartOnExternalChanges="true" requirePermission="true" />
</configSections>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/>
</startup>
<ReplicationConfigurationSection configProtectionProvider="RsaProtectedConfigurationProvider">
<EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
xmlns="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<KeyName>Rsa Key</KeyName>
</KeyInfo>
<CipherData>
<CipherValue>FXUE9iChoq/7HGE4nV3muaPZy4ejcDCcZx0PVasHZJi4xRs0ZPXI08unUegvXs+C2FALEskpHa+Tt4u24I8OhSRS9QI+I2kpgxTlQvMFmsvFu6pkDQS1jt13EHmov0Thr1CBGhMXyHMm0EGr0+yWKI3PfD9vwGmQl0yawLdyiockQk9kCuik8g8jnpiyaidYL/RKpdwNPBuH9wOm8WWTXlUL4N+SO98jAX0PPoDjaDbDdB14t71Favg7vxpjIj5pDlljj59ek3pudW0etIHm6v8YsJaE9Et62DfzB31W4kmGNgmmGWTu4/hF93J0kv9VgkmKTcdOmeXq2KHA2JCLKg==</CipherValue>
</CipherData>
</EncryptedKey>
</KeyInfo>
<CipherData>
<CipherValue>JkWK1jpOzcbtX8k/SVvTVRxQKO0ylRyWQ8imAOaIz51e3JmdhqXgdH8p5unceEiLCH2PTZOBZMIgYW4hYILiGnUE4SBZ6PfFr2vGowXdg13K808uSAx9taFb0HfvubcSQ23nwoBuJJmKfYooZX73YRnRvxIFH5SJZZ+WB8mTlNgaAZ+JftaN2rAlpH/cei4gwPCR64PaTu5VDJflSj0WnF7ZD13c0I0ZpHtJs29u0XTkBnAsL5DGULZsAexn2+89uaLfNpr9K+AYW8477TelVpnHGsMGDSOYOlWNUylldjATKZ/sgzDU/gq29dV+9RO18xvCHLXWjKKiT4B7UOlp82/1D/ky3OlK6opCEIJbCStm0q8MrvSQksdPN/yJ+S0Tv3E8hD4Wmf6grJOBlMGesomickqOzEudc+3fRwQS4Paf+ca3NgAk5utI+piZNhNtAnA/XU1ozDD0Zv381xaMTOTNjBq35hplK8zuHBVg+bZkbilSd3L4x4QAEv1Ds9Kt5hyUZyUNMWoXUXk0qoOP8UbMdHvUGvjsvAFudvZ7ZxtntiARptTFeTfg3qcghDdoyzOYBK3Md2urstEVdsdj6z6/RqBFO4qGY6hQ/IvIq+7lgG2rDsGH3AJlRNSdb+YJYktqGut65kvqcrSR2CgtYoGWcsUneBkpzQ65Rb0d6jL2Qt7zfJg1aA2iv97N15+tPjFDUQbbYFBi2ubvq1/pc7s/odaSUNK2LCfctXFG32MbEndJk1rXreLencAH/KlO2iJzA6QujwcT/LYo6w97lVbkrZAWWgxnUmVKeq+OwS6AybaK/sIw5wxBFsouCNdt</CipherValue>
</CipherData>
</EncryptedData>
</ReplicationConfigurationSection>
</configuration>
更多。
Encrypting sections and-or settings in an App.config file that will be redistributed
我可以使用 aspnet_regiis.exe
命令配置连接字符串加密。现在我已经创建了配置部分,在其中添加了自定义配置元素集合,这将存储连接信息的值。
namespace ExpressSnapSortCreation
{
/// <summary>
/// This Class hold the the Collection of Cofigration key
/// </summary>
internal class ServerReplicationsCollection : ConfigurationElementCollection
{
/// <summary>
/// This Will return the ConfigurationElement
/// </summary>
/// <returns>ConfigurationElement</returns>
protected override ConfigurationElement CreateNewElement()
{
return new ServerReplicationsElement();
}
/// <summary>
/// Get Element BY key
/// </summary>
/// <param name="element"></param>
/// <returns></returns>
protected override object GetElementKey(ConfigurationElement element)
{
return ((ServerReplicationsElement)element).Name;
}
/// <summary>
/// This is override on the Elements
/// </summary>
public class ServerReplicationsElement : ConfigurationElement
{
/// <summary>
/// Name of the Element
/// </summary>
[ConfigurationProperty("name", IsRequired = true)]
public string Name
{
get { return (string)this["name"]; }
set { this["name"] = value; }
}
/// <summary>
/// Data base name
/// </summary>
[ConfigurationProperty("connectionString", IsRequired = true)]
public string ConnectionString
{
get { return (string)this["connectionString"]; }
set { this["connectionString"] = value; }
}
/// <summary>
/// Data base user name
/// </summary>
[ConfigurationProperty("providerName", IsRequired = true)]
public string ProviderName
{
get { return (string)this["providerName"]; }
set { this["providerName"] = value; }
}
/// <summary>
/// Display Order
/// </summary>
[ConfigurationProperty("order", IsRequired = false)]
public int Order
{
get { return (int)this["order"]; }
set { this["order"] = value; }
}
}
}
}
这是分区创建的代码
class ServerReplications : ConfigurationSection
{
/// <summary>
/// The name of this section in the app.config.
/// </summary>
public const string SectionName = "ReplicationConfigurationSection";
/// <summary>
/// Replication data base name
/// </summary>
private const string ReplicationCenterCollectionName = "ReplicationDataBases";
[ConfigurationProperty(ReplicationCenterCollectionName)]
[ConfigurationCollection(typeof(ServerReplicationsCollection), AddItemName = "add")]
public ServerReplicationsCollection ReplicationDataBases { get { return (ServerReplicationsCollection)base[ReplicationCenterCollectionName]; } }
}
这是我的应用程序配置文件。
<?xml version="1.0"?>
<configuration>
<configSections>
<section name="ReplicationConfigurationSection"
type="ExpressSnapSortCreation.ServerReplications, ExpressSnapSortCreation" />
</configSections>
<ReplicationConfigurationSection>
<ReplicationDataBases>
<add name="ApplicationServices" connectionString="Data Source=PC-002\SQLEXPRESS2014;Initial Catalog=AML25;Persist Security Info=True;User ID=sa;Password=StItS!@#SeRvErPC-003" providerName="System.Data.SqlClient" order="1" />
<add name="ApplicationServices2" connectionString="Data Source=PC-004\SQLEXPRESS2014;Initial Catalog=AML26;Persist Security Info=True;User ID=sa;Password=StItS!@#SeRvErPC-002" providerName="System.Data.SqlClient" order="2" />
</ReplicationDataBases>
</ReplicationConfigurationSection>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/>
</startup>
</configuration>
在应用程序中,我们正在获取连接字符串的值。出于安全目的,我们无法显示 App.config 值中的数据。那么需要加密下面的Section
这是我使用的第一个命令
aspnet_regiis.exe -pef "ReplicationConfigurationSection" "C:\Users\mukesh.singh\Documents\Visual Studio 2015\Projects\AML\ExpressSnapSortCreation"
出错 将文件名 "app.config" 转换为 "Web.config"
An error occurred creating the configuration section handler for ReplicationConfigurationSection: Could not load file or assembly 'ExpressSnapSortCreation' or one of its dependencies. The system cannot find the file specified. (C:\Users\mukesh.singh\Documents\Visual Studio 2015\Projects\AML\ExpressSnapSortCreation\bin\Debug\web.config line 4)
Could not load file or assembly 'ExpressSnapSortCreation' or one of its dependencies. The system cannot find the file specified. Failed!
- 修改后
Could not load type 'ExpressSnapSortCreation.ServerReplications' from assembly 'System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
我也试过这个组合
aspnet_regiis.exe -pef "ExpressSnapSortCreation.ServerReplications/ExpressSnapSortCreations" "C:\Users\mukesh.singh\Documents\Visual Studio 2015\Projects\AML\ExpressSnapSortCreation
这是我用来加密 app.config 上自定义部分的代码。我只是打开 Bin 文件夹中的 app.config 文件,它已加密
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
ConfigurationSection section = config.GetSection("ReplicationConfigurationSection");
if (section != null)
{
if (!section.IsReadOnly())
{
if (!section.SectionInformation.IsProtected)
{
if (!section.ElementInformation.IsLocked)
{
section.SectionInformation.ProtectSection("RsaProtectedConfigurationProvider");
section.SectionInformation.ForceSave = true;
config.Save(ConfigurationSaveMode.Full);
Console.WriteLine("Section {0} is now protected by {1}",
section.SectionInformation.Name.ToString(),
section.SectionInformation.ProtectionProvider.Name.ToString());
}
}
}
}
当我打开配置文件时,它看起来像这样
<configuration>
<configSections>
<section name="ReplicationConfigurationSection" type="ExpressSnapSortCreation.ServerReplications, ExpressSnapSortCreation" allowLocation="true" allowDefinition="Everywhere" allowExeDefinition="MachineToApplication" overrideModeDefault="Allow" restartOnExternalChanges="true" requirePermission="true" />
</configSections>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/>
</startup>
<ReplicationConfigurationSection configProtectionProvider="RsaProtectedConfigurationProvider">
<EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
xmlns="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<KeyName>Rsa Key</KeyName>
</KeyInfo>
<CipherData>
<CipherValue>FXUE9iChoq/7HGE4nV3muaPZy4ejcDCcZx0PVasHZJi4xRs0ZPXI08unUegvXs+C2FALEskpHa+Tt4u24I8OhSRS9QI+I2kpgxTlQvMFmsvFu6pkDQS1jt13EHmov0Thr1CBGhMXyHMm0EGr0+yWKI3PfD9vwGmQl0yawLdyiockQk9kCuik8g8jnpiyaidYL/RKpdwNPBuH9wOm8WWTXlUL4N+SO98jAX0PPoDjaDbDdB14t71Favg7vxpjIj5pDlljj59ek3pudW0etIHm6v8YsJaE9Et62DfzB31W4kmGNgmmGWTu4/hF93J0kv9VgkmKTcdOmeXq2KHA2JCLKg==</CipherValue>
</CipherData>
</EncryptedKey>
</KeyInfo>
<CipherData>
<CipherValue>JkWK1jpOzcbtX8k/SVvTVRxQKO0ylRyWQ8imAOaIz51e3JmdhqXgdH8p5unceEiLCH2PTZOBZMIgYW4hYILiGnUE4SBZ6PfFr2vGowXdg13K808uSAx9taFb0HfvubcSQ23nwoBuJJmKfYooZX73YRnRvxIFH5SJZZ+WB8mTlNgaAZ+JftaN2rAlpH/cei4gwPCR64PaTu5VDJflSj0WnF7ZD13c0I0ZpHtJs29u0XTkBnAsL5DGULZsAexn2+89uaLfNpr9K+AYW8477TelVpnHGsMGDSOYOlWNUylldjATKZ/sgzDU/gq29dV+9RO18xvCHLXWjKKiT4B7UOlp82/1D/ky3OlK6opCEIJbCStm0q8MrvSQksdPN/yJ+S0Tv3E8hD4Wmf6grJOBlMGesomickqOzEudc+3fRwQS4Paf+ca3NgAk5utI+piZNhNtAnA/XU1ozDD0Zv381xaMTOTNjBq35hplK8zuHBVg+bZkbilSd3L4x4QAEv1Ds9Kt5hyUZyUNMWoXUXk0qoOP8UbMdHvUGvjsvAFudvZ7ZxtntiARptTFeTfg3qcghDdoyzOYBK3Md2urstEVdsdj6z6/RqBFO4qGY6hQ/IvIq+7lgG2rDsGH3AJlRNSdb+YJYktqGut65kvqcrSR2CgtYoGWcsUneBkpzQ65Rb0d6jL2Qt7zfJg1aA2iv97N15+tPjFDUQbbYFBi2ubvq1/pc7s/odaSUNK2LCfctXFG32MbEndJk1rXreLencAH/KlO2iJzA6QujwcT/LYo6w97lVbkrZAWWgxnUmVKeq+OwS6AybaK/sIw5wxBFsouCNdt</CipherValue>
</CipherData>
</EncryptedData>
</ReplicationConfigurationSection>
</configuration>
更多。
Encrypting sections and-or settings in an App.config file that will be redistributed