Это возможно.Для этого есть API (посмотрите на пространство имен System.Security.Cryptography
) или из командной строки вы можете использовать aspnet_regiis:
aspnet_regiis -pc -exp : create an exportable key pair
aspnet_regiis -px : export an RSA key pair to an XML file
aspnet_regiis -pi : import an RSA key pair from an XML file
aspnet_regiis -pa : add access for an account to a key container
Конечно, при использовании шифрования вы просто заменяете проблему защитыданные (ваша строка подключения) с помощью проблемы защиты ключа.
В вашем примере, как вы знаете, поскольку вы говорите, что он не пуленепробиваемый, пользователю потребуется доступ к контейнеру ключей, чтобы он мог расшифровать зашифрованную строку подключения.
Кроме того, любой, кто получит XML-файл, содержащий экспортированную пару ключей, сможет сделать это.
ОБНОВЛЕНИЕ
Развертываниепроцедура будет выглядеть примерно так:
- Создание экспортируемого ключа на рабочей станции разработчика (aspnet_regiis -pc -exp)
- Шифрование раздела конфигурации на рабочей станции разработчика с помощью этого ключа
- Экспорт ключа в файл XML (aspnet_regiis -px)
- Копирование файла XML на целевой компьютер
- Импорт ключа из файла XML на целевом компьютере (aspnet_regiis -pi)
- Предоставить учетным записям пользователей доступ для чтения ключа на целевом компьютере (aspnet_regiis -pa)
Разделы, зашифрованные с использованием защищенного поставщика конфигурации, такого как RSAProtectedConfigurationProvider
, будут расшифрованы автоматическипри условии, что удостоверение Windows, под которым выполняется приложение, имеет разрешение на чтение для контейнера ключа RSA.