2

我正在开发一个 .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 用户存储进行加密,或者如果不可能:什么是易于实施的替代方案?

4

0 回答 0