0

如果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在另一台计算机上解密,我们使用名为myrsakeycontainer的容器从myrsakeyfile.xml导入它们的密钥对。

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

  • 我希望能够像 RsaProtectedConfigurationProvider那样解密大量数据(以防万一)。
  • 是的,我可以使用RijndaelManaged(我最喜欢的)进行实际加密,而对于对称密钥传输(导出/导入),我可以使用RSACryptoServiceProvider。这让我处于这样一种情况,如果我想导出/导入对称密钥,我应该首先用公钥或 RSA 对其进行加密,将其导入另一台机器,然后用 RSA 的私钥解密。将 RSA 密钥对与加密的对称密钥一起导出。
  • 但是,当我通过 aspnet_regiis.exe 导出RsaProtectedConfigurationProvider使用的 RSA 密钥对时 ,我相信它只导出 xml 文件中的公钥/私钥对,而不导出其他信息(如对称密钥信息)。

  • 那么,仅使用 RSA 密钥对, RsaProtectedConfigurationProvider如何设法解密在另一台计算机上加密的信息(在我的情况下是巨大的 - 超过 40 万个字符)?如果它使用对称算法(也许?!)来加密信息,那么该对称密钥如何导出/导入到另一台计算机进行解密?RSA 密钥容器的对称密钥部分是通过 aspnet_regiis.exe 导出的,还是对称密钥是基于算法设计的动态?

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

    我很想知道 RsaProtectedConfigurationProvider内部使用了什么。

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

类似问题 - RSAProtectedConfigurationProvider 在 web.config 加密中使用了哪些算法?

4

1 回答 1

1

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

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

真正发挥这种魔力的函数在这里:

公共虚拟 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

于 2012-12-12T23:44:41.493 回答