C# 加密app.config文件
我有一个app.config文件需要与我的应用程序一起分发。创建它是因为我添加了一个ASMXWeb服务的服务引用 如果这个文件被修改/查看,这不是什么大不了的事,但我仍然希望它安全。我已经检查了配置的散列,并确保它是有效的,但我仍然希望增加一层保护 这是我的配置:C# 加密app.config文件,c#,C#,我有一个app.config文件需要与我的应用程序一起分发。创建它是因为我添加了一个ASMXWeb服务的服务引用 如果这个文件被修改/查看,这不是什么大不了的事,但我仍然希望它安全。我已经检查了配置的散列,并确保它是有效的,但我仍然希望增加一层保护 这是我的配置: 那里面有我可以加密的东西吗?程序运行时会读取文件,因此更改文件可能不是个好主意,您可以在应用程序中检查每一行的校验和,或者检查上次运行后的修改或其他内容,以确保每一行的校验和有效。老实说,我以前从未听说过对app.config进行加密
那里面有我可以加密的东西吗?程序运行时会读取文件,因此更改文件可能不是个好主意,您可以在应用程序中检查每一行的校验和,或者检查上次运行后的修改或其他内容,以确保每一行的校验和有效。老实说,我以前从未听说过对app.config进行加密。你可以对app.config或Web.config的部分进行加密,有一堆博客条目详细介绍了这一点: 以下是MSDN版本: 下面是一个关于如何通过代码进行加密的示例:
我在web.config中使用以下方法加密我的连接字符串,为什么不自己使用相同的方法呢。不过我不确定 要加密:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pef "connectionStrings" "\myWebSitePath"
要解密:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pdf "connectionStrings" "\myWebsitePath"
将它们放在bat文件中,以便您可以动态加密或解密
如果这个文件是
修改/查看
在这种情况下,安全是为了什么
您可以使用编程方式加密配置文件的节。您无法加密整个
-它是一个配置节组,其中包含配置节
aspnet\u regis
将只加密配置部分-因此您需要有选择地加密您需要的部分,如下所示:
cd C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
aspnet_regiis.exe -pef "system.serviceModel/bindings" .
aspnet_regiis.exe -pef "system.serviceModel/services" .
等等
有了它,你可以很容易地加密你需要的东西——不太重要的东西可以用明文保存
警告:由于它是aspnet\u regiis
,它需要处理web.config
文件-将您的app.config
复制到某个位置并调用它web.config
,加密您的部分,然后将这些加密部分复制回您自己的app.config
或者编写您自己的配置节加密/解密程序-它实际上只是几行代码!或者使用我的-我写了一个小的
ConfigSectionCrypt
实用程序,来我的-完整的源代码(C#-.NET3.5-VisualStudio2008)。它允许您加密和解密任何配置文件中的节-只需在命令行上指定文件名。您必须在项目中设置对System.Configuration.dll的引用,代码才能运行
ExeConfigurationFileMap configFileMap = new ExeConfigurationFileMap();
configFileMap.ExeConfigFilename = exeConfigName;
System.Configuration.Configuration myConfig = ConfigurationManager.OpenMappedExeConfiguration(configFileMap, ConfigurationUserLevel.None);
ConnectionStringsSection section = myConfig.GetSection("connectionStrings") as ConnectionStringsSection;
if (section.SectionInformation.IsProtected)
{
// Remove encryption.
section.SectionInformation.UnprotectSection();
}
else
{
// Encrypt the section.
section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
}
myConfig.Save();
来自@marc_s的答案非常棒,但我在理解他所说的到底该怎么做上有点困难。对于像我这样还没有为大人物编程的人来说,用simpleton格式解释同样的过程做得非常好。以下是分项数字: 最好的方法是使用aspnet_regiis.exe保护它 应用即使应用程序不是ASP.NET应用程序, 这仍然有效。这是怎么做的
Rsa密钥
rUmEA8h02uMZ5M4uEVtL+5M/UvPuyJ4UJz5d/Pd4h4jpFPGVf29ha4d+BMt/IOUPVISxDxUZY1JZYC60ZIxGCCKZQBYNWKJOUVANQVWUNDGIGVGVAP2OHSJBLAMTWHTUDL0ST5TQSVHNQE+r9G59Bnrp5HkuU3Eg09/8j6Jo=
U2JEHzJ+WjSdlocT00cC9TE3+DN3V7XE1RWX7BKAPUISO2F3HM18MHNM1HXEBLNDS6IBNRPN87+BJVZXYZ+Sis/ZD4XBZEP4JBG2F8TQLLUBAGV3W4W4EPUTSP2ALB5RDCBOYCDIZJ2CAPOZKMDVZRX8YOJI9RFUGNOWMNA4BNCHKUEDVWQ+uCK/8UAQ48J5UROQ0YGIE9JDG==
我主要想以某种方式隐藏我的授权脚本的URL。我知道没有任何桌面加密方法会完全限制某人查看它,但我想对标准用户隐藏它。你可以使用某种ROT加密,在你的应用程序中你可以解密它,ROT加密只是字符移位,就像使用标准移位一样2。一个字符串“abc”变成“cde”虽然你可以使用更复杂的方法,但你需要多大的安全性取决于你自己。只是为了让标准用户看不到URL。我只是不希望它是纯文本。SectionInformation.ProtectSection似乎是更简单的解决方案,为什么要使用单独的aspnet_regiis实用程序?SectionInformation.ProtectSection推断您在部署之前有一个未加密的源文件,这是不安全的。Aspnet_regiis.exe可用于加密开发和产品版本,请维护
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings 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>rUmEA8h02uMZ5M4uEVtL+5M/UvPuyJ4UJz5d/Pd4h4jpFPGVf29ha4d+BMt/iOupVisXDxuZY1jzyc6O0ZixGcCkZqbynwKjouVANQVWUnDgIFgVap2ohsxjblAMtWHTUWDlL0ST5tqSVHNQE+r9G59Bnrp5HkuU3Eg09/8j6Jo=</CipherValue>
</CipherData>
</EncryptedKey>
</KeyInfo>
<CipherData>
<CipherValue>U2JEHzJ+WjSdlocT00cC9TE3+Dn3v7xE1RwX7bKAPuISO2f3hm18MZHnm1hXEBlnDS6iBNRPN87+BJJvZXYz+Sis/ZD4xBZEP4jBG2F8tqlLUbagv3W4epbuTSp2aalb5rdcBoycdIzSj2CApOzSaSKkMDvZrX8yoJI9RfuGnOWmNa4bncHkUEDvWq+uCK/8uaQ48J5uRoq7O0YgIe9jDg==</CipherValue>
</CipherData>
</EncryptedData>
</connectionStrings>
</configuration>