RsaProtectedConfigurationProvider实现vs RSACryptoServiceProvider c#

时间:2012-09-06 13:44:08

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

如果RSACryptoServiceProvider无法加密大于KeySize的数据,那么.Net框架中如何实现RsaProtectedConfigurationProvider

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

我知道非对称算法不适用于大数据,我只是尝试使用下面的代码加密长度超过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

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

    • 我希望能够解密大量数据(以防万一) RsaProtectedConfigurationProvider确实如此。
    • 是的,我可以使用RijndaelManaged(我最喜欢的)作为实际 加密和对称密钥传输(导出/导入)I 可以使用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?

1 个答案:

答案 0 :(得分:1)

加密对称密钥存储在XML 旁边对称密钥已加密的加密配置信息。

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

真正实现这一魔力的功能在于:

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

声明类型:System.Security.Cryptography.Xml.EncryptedXml 汇编:System.Security,Version = 2.0.0.0

查看

周围的代码
this.m_document.SelectNodes("//enc:EncryptedKey", nsmgr);

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