Восстановить ключ RijndaelManaged без использования EntLibConfig.exe - PullRequest
0 голосов
/ 16 сентября 2018

Я работаю со старым приложением, в котором для шифрования данных используется блок криптографического приложения Enterprise Library.

В настоящее время на каждом новом настраиваемом сервере мы должны вручную запускать EntLibConfig.exe (приложение пользовательского интерфейса), импортировать ключ, экспортированный с другого компьютера, и восстанавливать ключ для нового сервера.

Этот ручной процесс должен прекратиться. Есть ли способ, которым я могу воссоздать этот ключ с помощью командной строки? Возможно, написав приложение для генерации ключа? Мне не повезло выяснить это с помощью ссылок RijndaelManaged в документах .NET.

Использование симметричного провайдера, RijndaelManaged.

На самом деле любое решение для восстановления ключа RijndaelManaged на основе текущего ключа, вероятно, будет полезно. Нет пользовательского интерфейса или ручные процессы / клики!

1 Ответ

0 голосов
/ 29 сентября 2018

Прочитав источник в Enterprise Library некоторое время, я нашел способ сделать это.Это просто код POC, никаких проверок и т. Д.

Допущения:

  • c:\key\engagementproviderexport.txt - это ключ, экспортированный с рабочего сервера
  • c:\key\engagementprovider.key - это ключвновь созданный ключ RijndaelManaged для нового компьютера
  • exportKeyPw - пароль, используемый для защиты экспортируемого ключа
  • Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.dll добавлена ​​ссылка
  • System.Security.dll добавлена ​​ссылка
  • ProtectedKey - это Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.ProtectedKey class
  • KeyManager - это Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.KeyManager, который выполняет всю работу здесь!

POC:

using Microsoft.Practices.EnterpriseLibrary.Security.Cryptography;
using System.Security;
using System.IO;

string exportKeyFile = @"C:\key\EngagementProviderExport.txt";
string exportKeyPw = "p@ssword";
string saveKeyFile = @"C:\key\EngagementProvider.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);
}
...