在C#桌面应用或Web应用开发中,App.config文件通常用于存储数据库连接字符串、接口地址等配置信息,其中数据库密码属于高敏感内容,如果以明文形式存储,一旦配置文件被非法获取,就会导致数据库安全受到威胁。使用系统自带的aspnet_regiis工具可以对App.config中的指定配置节进行加密,加密后的内容无法直接查看,应用运行时可以自动解密读取,兼顾安全性和使用便利性。

aspnet_regiis工具基本介绍
aspnet_regiis是.NET Framework自带的一个配置工具,位于系统目录的%windir%Microsoft.NETFramework对应.NET版本文件夹下,它除了可以注册ASP.NET运行环境,还支持对配置文件中的配置节进行加密和解密操作。该工具使用的是Windows数据保护API(DPAPI)进行加密,加密密钥和当前系统用户或机器绑定,不需要额外管理加密密钥,使用起来非常方便。
加密前的App.config准备
首先我们需要有一个包含数据库连接字符串的App.config文件,数据库连接字符串通常放在<connectionStrings>配置节中,示例如下:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="DbConnection"
connectionString="Server=127.0.0.1;Database=TestDB;Uid=root;Pwd=123456;"
providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
这里的Pwd=123456就是明文的数据库密码,接下来我们使用aspnet_regiis对这个<connectionStrings>配置节进行加密。
使用aspnet_regiis加密App.config的步骤
1. 找到aspnet_regiis工具路径
首先需要确定当前项目使用的.NET Framework版本,比如项目使用的是.NET Framework 4.8,那么工具路径通常为:
C:WindowsMicrosoft.NETFrameworkv4.0.30319aspnet_regiis.exe
如果是64位系统,也可以使用Framework64目录下的对应版本工具。
2. 执行加密命令
打开命令提示符(需要以管理员身份运行),切换到aspnet_regiis所在目录,然后执行以下命令:
aspnet_regiis -pef "connectionStrings" "你的App.config所在文件夹路径"
参数说明:
- -pef:表示加密指定路径的配置文件的指定配置节
- 第一个参数"connectionStrings":要加密的配置节名称
- 第二个参数:App.config所在的文件夹绝对路径,注意不要包含文件名
比如你的App.config路径是D:TestProjectApp.config,那么命令就是:
aspnet_regiis -pef "connectionStrings" "D:TestProject"
执行成功后,命令提示符会显示"加密成功"的提示,此时打开App.config文件,会发现<connectionStrings>配置节已经被加密,内容类似如下:
<?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>加密后的字符串内容</CipherValue>
</CipherData>
</EncryptedKey>
</KeyInfo>
<CipherData>
<CipherValue>加密后的配置内容</CipherValue>
</CipherData>
</EncryptedData>
</connectionStrings>
</configuration>
加密后读取配置的方式
很多开发者会担心加密后代码无法读取数据库连接字符串,实际上不需要修改任何读取配置的代码,.NET运行时会自动解密加密的配置节。原来的读取代码依然可以正常使用:
using System.Configuration;
namespace TestProject
{
class Program
{
static void Main(string[] args)
{
// 读取加密后的数据库连接字符串,运行时自动解密
string connStr = ConfigurationManager.ConnectionStrings["DbConnection"].ConnectionString;
Console.WriteLine(connStr);
}
}
}
运行代码后,输出的连接字符串依然是明文内容,和加密前完全一致,不需要额外编写解密代码。
配置解密操作
如果后续需要修改数据库连接字符串,需要先对配置节进行解密,修改完成后再重新加密。解密命令和加密命令类似,只需要把-pef换成-pdf即可:
aspnet_regiis -pdf "connectionStrings" "D:TestProject"
执行成功后,<connectionStrings>配置节会恢复为明文状态,修改完成后再执行加密命令即可重新加密。
注意事项
- 加密后的配置文件如果复制到另一台机器上,会因为密钥不匹配导致无法解密,因此加密操作需要在应用最终部署的机器上执行,或者提前导出加密密钥到其他机器导入。
- aspnet_regiis工具仅支持.NET Framework项目,.NET Core及以上版本的项目无法使用该工具,需要使用其他配置加密方案。
- 执行加密解密命令时,需要确保App.config文件没有被其他进程占用,否则会操作失败。
- 如果App.config是Web.config,加密命令的参数路径需要指向网站根目录,操作方式和普通App.config一致。
C#App.configaspnet_regiis配置加密数据库连接字符串修改时间:2026-07-17 23:57:30