在不使用 EntLibConfig.exe 的情况下恢复 RijndaelManaged 密钥



我正在使用一个较旧的应用程序,该应用程序使用企业库加密应用程序块进行数据加密。

目前,对于每个设置的新服务器,我们必须手动运行EntLibConfig.exe(一个UI应用程序(,导入从另一台机器导出的密钥,并恢复新服务器的密钥。

这个手动过程需要消失。有没有办法使用命令行重新创建此密钥?也许通过编写应用程序来生成密钥?我没有运气使用 .NET 文档中的 RijndaelManaged 引用来解决这个问题。

使用对称提供程序,RijndaelManaged。

实际上,任何基于当前密钥还原 RijndaelManaged 密钥的解决方案都可能很有用。没有用户界面或手动流程/点击!

在通读了一段时间的企业库源代码后,我想出了一种方法来做到这一点。这只是POC代码,没有检查等。

假设:

  • c:keyengagementproviderexport.txt是从工作服务器导出的密钥
  • c:keyengagementprovider.key是新创建的 Rijndael为新计算机管理的密钥
  • exportKeyPw是用于保护导出密钥
  • 的密码
  • 添加了Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.dll引用
  • 添加了System.Security.dll引用
  • ProtectedKey是Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.ProtectedKey类
  • KeyManager是Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.KeyManager静态类,它在这里完成所有工作!

POC:

using Microsoft.Practices.EnterpriseLibrary.Security.Cryptography;
using System.Security;
using System.IO;
string exportKeyFile = @"C:keyEngagementProviderExport.txt";
string exportKeyPw = "p@ssword";
string saveKeyFile = @"C:keyEngagementProvider.key";
ProtectedKey NewServerKey;
using (FileStream fs = File.OpenRead(exportKeyFile))
{
NewServerKey = KeyManager.RestoreKey(fs, exportKeyPw, System.Security.Cryptography.DataProtectionScope.LocalMachine);
}
using (FileStream ofs = File.OpenWrite(saveKeyFile)) 
{
KeyManager.Write(ofs, NewServerKey);
}

相关内容

  • 没有找到相关文章

最新更新