Доступ к контейнеру ключей RSA в другом приложении - PullRequest
0 голосов
/ 25 февраля 2020

Я шифрую строку, используя скрипт powershell. Этот скрипт вызывается в установщике, созданном InnoSetup. Затем устанавливаемая служба должна расшифровать эту строку и использовать ее.

Скрипт, который шифрует, выглядит следующим образом (powershell):

$csp = New-Object System.Security.Cryptography.CspParameters
$csp.KeyContainerName = "my name"
$csp.Flags = CspProviderFlags.UseMachineKeyStore

$rsa = New-Object System.Security.Cryptography.RSACryptoServiceProvider -ArgumentList 2048,$csp
$rsa.PersistKeyInCsp = $true

$enc = [System.Text.Encoding]::UTF8
$byteData = $enc.GetBytes($source)

$encryptedData = $rsa.Encrypt($byteData, $false)
$encryptedString = [Convert]::ToBase64String($encryptedData)

Код, который расшифровывает (c#):

var cspParameters = new CspParameters
{
    KeyContainerName = "my name",
    Flags = CspProviderFlags.UseMachineKeyStore
};
var rsa = new RSACryptoServiceProvider(2048, cspParameters);
var encryptedData = Convert.FromBase64String(stringToDecrypt);
var decryptedData = rsa.Decrypt(encryptedData, false);
var result = Encoding.UTF8.GetString(decryptedData);

Я пробовал разные флаги для CSP, тоже разные кодировки. Если я шифрую / дешифрую с помощью OAEP, я получаю ошибку OAEP_Decoding, без нее я просто получаю сообщение о неправильном параметре.

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

Есть идеи, что я делаю здесь неправильно и как это исправить? Заранее спасибо.

...