Я шифрую строку, используя скрипт 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, без нее я просто получаю сообщение о неправильном параметре.
Если я запускаю службу от имени администратора, она успешно расшифровывается, но это не вариант для меня. Хотя это заставляет меня предположить, что проблема в правах пользователя, но я не могу быть уверен.
Есть идеи, что я делаю здесь неправильно и как это исправить? Заранее спасибо.