如果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 中的导出导入密钥选项之外,还有更多的事情发生在幕后。
我的理解:
我们使用RsaProtectedConfigurationProvider加密myapp.exe.config,提供一个密钥容器名称myrsakeycontainer,并将公钥和私钥导出到一个 xml 文件myrsakeyfile.xml。
如果我们希望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 加密中使用了哪些算法?