【问题标题】:RsaProtectedConfigurationProvider implementation vs RSACryptoServiceProvider c#RsaProtectedConfigurationProvider 实现与 RSACryptoServiceProvider c#
【发布时间】:2012-09-06 13:44:08
【问题描述】:

如果RSACryptoServiceProvider不能加密大于KeySize的数据,那么RsaProtectedConfigurationProvider在.Net框架中是如何实现的?

我正在开发一个用于加密/解密一些敏感信息的实用程序。我的两个加密提供程序选项是 DPAPI 和 RSA,而 DPAPI 不适合网络农场类型的环境,RSA 适合,因为带有 KeyContainer 的导出/导入选项。这是在工作站上运行的独立应用程序。

我知道非对称算法不是为大数据设计的,我只是尝试使用下面的代码加密长度超过 400K 的字符串,效果很好。

        if (!section.SectionInformation.IsProtected)
        {
            section.SectionInformation.ProtectSection("RSAProtectedConfigurationProvider");
            section.SectionInformation.ForceSave = true;
            config.Save(ConfigurationSaveMode.Full);
        }

这无疑意味着除了 aspnet_regiis.exe 中的导出导入密钥选项之外,还有更多的事情发生在幕后。

我的理解:

  1. 我们用 RsaProtectedConfigurationProvider 加密 myapp.exe.config,提供密钥容器名称 myrsakeycontainer,并导出公有和私有xml 文件的密钥 myrsakeyfile.xml.

  2. 如果我们希望 myapp.exe.config 在另一台计算机上被解密,我们使用名为 的容器从 myrsakeyfile.xml 导入它们的密钥对myrsakeycontainer.

这很好用。我可以通过RSACryptoServiceProvider 在我的项目中实现相同的目标。但我无法处理大于密钥大小的数据 new RSACryptoServiceProvider(cspParameters) 为我生成。

  • 我希望能够以这种方式解密大量数据(以防万一) RsaProtectedConfigurationProvider 会。
  • 是的,我可以使用RijndaelManaged(我最喜欢的)作为实际 加密和对称密钥传输(导出/导入)我 可以使用RSACryptoServiceProvider。这让我陷入 如果我想导出/导入对称密钥,我应该 首先使用公钥或 RSA 对其进行加密,然后将其导入另一个 机,用 RSA 的私钥解密。哪个是导出 RSA 密钥对以及加密的对称密钥。
  • 但是,当我导出 RSA 密钥对时 RsaProtectedConfigurationProvider 通过 aspnet_regiis.exe,我 相信它只导出 xml 中的公钥/私钥对 文件,没有其他信息(如对称密钥信息)。

  • 那么,只有 RSA 密钥对,如何 RsaProtectedConfigurationProvider 设法解密(巨大-结束 在我的情况下是 400K 个字符)在另一个上加密的信息 电脑? 如果它使用对称算法(也许?!) 加密信息,该对称密钥如何导出/导入到另一个 电脑解密? RSA 密钥容器的对称密钥部分是通过 aspnet_regiis.exe 导出的,还是对称密钥是根据算法动态设计的?

  • 我可以使用 Rijndael,它的密钥是用 RSA 加密的 密钥对,我可以导出/导入 RSA 密钥对和 Rijndael 对称密钥到另一台计算机。 (我过去做过)

    我很想知道里面用的是什么 RsaProtectedConfigurationProvider

有什么理论吗?概念?链接?建议?请..

类似问题 - What algorithms are used by RSAProtectedConfigurationProvider in web.config encyrption?

【问题讨论】:

    标签: c# windows encryption-asymmetric encryption-symmetric


    【解决方案1】:

    加密对称密钥对称密钥已加密的加密配置信息一起存储在 XML 中。

    如果您使用 Reflector 查看代码,它的作用是加载 XML 节点并使用 非对称 RSA 私钥来解密存储在XML 节点本身。

    真正做到这一点的函数在这里:

    public virtual SymmetricAlgorithm GetDecryptionKey(EncryptedData encryptedData, string symmetricAlgorithmUri);

    声明类型:System.Security.Cryptography.Xml.EncryptedXml 程序集:System.Security,版本=2.0.0.0

    查看周围的代码

    this.m_document.SelectNodes("//enc:EncryptedKey", nsmgr);
    

    这篇博文有一篇关于如何在实际实践中配对非对称和对称算法的精彩文章:http://pages.infinit.net/ctech/20031101-0151.html

    【讨论】:

    • 正是我正在寻找的答案。钉在头上!该链接也是一个很好的链接。顺便说一句,我正在研究我的一个项目,为 SSIS 包进行配置文件加密,并且由于时间有限,我最终从非对称密钥属性(如模数、指数......)中推导出对称密钥。项目在ssiscipherboy.codeplex.com 上线。 public virtual SymmetricAlgorithm GetDecryptionKey(EncryptedData encryptedData, string symmetricAlgorithmUri); 现在一切都说得通了。
    猜你喜欢
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    • 2010-12-10
    • 2019-04-26
    相关资源
    最近更新 更多