gpt4 book ai didi

cryptography - ConfigurationManage -> section.SectionInformation.ProtectSection() 机器依赖吗?

转载 作者:行者123 更新时间:2023-12-04 07:09:02 30 4
gpt4 key购买 nike

在代码中

Configuration config = ConfigurationManager.OpenExeConfiguration (Application.ExecutablePath);
ConnectionStringsSection section = config.GetSection("connectionStrings") as ConnectionStringsSection;
if (!section.SectionInformation.IsProtected)
{
section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
}

当我将应用程序移动到另一台机器时遇到了一些麻烦。

section.SectionInformation.ProtectSection 是否依赖于调用机器,这意味着我无法复制配置文件并在另一台机器上使用它?

是否有独立于机器的提供者(除 DataProtectionConfigurationProvider 之外)?

我的应用程序要求它在具有相同配置文件的多台机器上工作(它必须从闪存驱动器运行)。

谢谢,
法比奥

最佳答案

Is the section.SectionInformation.ProtectSection call machine dependent, meaning, I cannot copy the config file and use it on another machine ?



是的,据我所知,这是正确的。 This article说 key 存储在每台机器或每个用户的基础上。

Is there a provider (other than DataProtectionConfigurationProvider ) that is machine independet?



不是开箱即用的,我知道的两个提供商( DataProtectionConfigurationProviderRSAProtectedConfigurationProvider )都有相同的“问题”。我发现了一些提示,即 RSA 提供程序允许跨机器重复使用 key ,但没有找到任何关于如何实现这一点的示例。

但是,有一种方法可以实现您的需求,我昨天刚刚自己做了,因为我遇到了类似的问题(我需要从网络位置运行应用程序,并且所有客户端都需要共享相同的加密配置文件) .您可以自己滚动 ProtectedConfigurationProvider .以下是一些说明该概念的链接:
  • Implementing a Protected Configuration Provider
  • How to: Build and Run the Protected Configuration Provider Example
  • Protected Configuration Provider Implementation Example

  • 使用这些文章,我能够构建自己的 ProtectedConfigurationProvider,它不依赖于机器或用户,并在应用程序中使用它。我的发布版本中有一个构建后步骤来保护配置部分,因此我只部署了它的 protected 版本。获取 protected 部分的数据在其他机器上可以正常工作,没有任何问题。当然,您必须非常小心如何安全地加密和解密您的部分。有几个例子概述了如何做到这一点, this我认为是其中之一。

    三篇文章中没有明确说明的一件事是,如果您不使用 ASP.net,如何让您的应用找到您的提供者。将它安装到全局程序集缓存中的通常方法可能对您不起作用,因为您声明您正在从闪存驱动器运行应用程序。因此,您需要将其添加到您的 app.config文件代替,类似于:
    <?xml version="1.0"?>
    <configuration>
    ...
    <configProtectedData defaultProvider="MyEncryptionProvider">
    <providers>
    <add name="MyEncryptionProvider"
    type="MyAssembly.MyEncryptionProvider, MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=whatever_the_assembly_token_is" />
    </providers>
    </configProtectedData>
    ...
    </configuration>

    如果进行加密的程序集与主程序集位于同一路径中,则这应该有效。我正在使用签名程序集, sn -T {Assembly}将为您提供需要在配置文件中输入的 PublicKeyToken。

    然后像这样保护一个部分:
    using System.Configuration;

    ...

    Configuration oConfiguration = ConfigurationManager.OpenExeConfiguration(yourExePath);
    oSection.SectionInformation.ProtectSection("MyEncryptionProvider");
    oSection.SectionInformation.ForceSave = true;
    oConfiguration.Save();

    我今天测试了它,它与在开发机器 (XP SP3) 上加密的配置文件一起工作,并在 XP SP2、Win7 32Bit 和 Win7 64Bit 上使用。

    免责声明
  • 如果您不签署程序集,则不确定这些是否有效。
  • 使用风险自负,我不是任何标准的安全专家。
  • 关于cryptography - ConfigurationManage -> section.SectionInformation.ProtectSection() 机器依赖吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7324258/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com