我正在开发一个 .NET 4.5 桌面应用程序 (wpf)。我成功创建了一个自定义部分,我可以从中加载/编辑 App.config 中的数据。现在我想加密这一部分,并设法使用 DPAPI 做到这一点:
SectionInformation secInfo = Section.SectionInformation;
if(!secInfo.IsProtected)
{
secInfo.ProtectionSection("DataProtectionConfigurationProvider");
secInfo.ForceSave = true;
}
但是,当我尝试在另一台机器上解密这个 App.config - 但使用相同的用户(活动目录)时,这会失败。我手头没有具体的错误消息 - 我相信这根本没有必要,因为在我看来,这是由于“使用机器商店”标志而导致的失败,我不知道如何关掉。
我尝试在我的 app.config 中添加一个 configProtectedData,如下所示:
<configuration>
<configProtectedData>
<providers>
<add useMachineProtection="false" keyEntropy="" name="MyUserDataProtectionConfigurationProvider"
type="System.Configuration.DpapiProtectedConfigurationProvider, System.Configuration,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</configProtectedData>
</configuration>
我比改变了
secInfo.ProtectionSection("DataProtectionConfigurationProvider");
至
secInfo.ProtectionSection("MyUserDataProtectionConfigurationProvider");
但是,我收到智能感知错误“不允许使用 'useMachineProtection' 属性。” 在 App.config中,当我启动应用程序时,我在 System.Windows.Application..ctor() 中的 System.Windows.Application.ApplicationInit() 中得到一个 TypeInitializationException。我读到我必须运行控制台命令来使用自定义 ProtectionProvider 加密文件,但是这些教程都是关于 ASP.NET 的,所以我不确定这是否适合我的需要。
我有点卡在这里。这个 API 有点简洁,因为我不必担心如何以及何时解密 - 我只需从该部分读取值,其余部分会自动完成。长话短说:如何使用 DPAPI 用户存储进行加密,或者如果不可能:什么是易于实施的替代方案?